0

我想使用以下标准从大矩阵中删除行:

应删除第二列中包含 100 的任何行。

如何才能做到这一点?我知道如何选择这些行,但我不确定如何使用规则删除它们。

4

2 回答 2

4
R > mat = matrix(c(1,2,3,100,200,300), 3,2)
R > mat
     [,1] [,2]
[1,]    1  100
[2,]    2  200
[3,]    3  300
R > (index = mat[,2] == 100)
[1]  TRUE FALSE FALSE
R > mat[index, ]
[1]   1 100
R > mat[!index, ]
     [,1] [,2]
[1,]    2  200
[2,]    3  300

以前我对索引与另一种方法感到困惑which,这里是解决方案which

R > (index2 = which(mat[,2] == 100))
[1] 1
R > mat[-index2, ]
     [,1] [,2]
[1,]    2  200
[2,]    3  300

注意这些索引(!-)的不同用途。

于 2013-01-23T19:06:56.903 回答
0

这是我在 Matlab 中使用 matrix 的方法A

选项1

for (i=size(A,1):-1:0)
    if (A(i,2)==100)
        A(i,:)=[];
    end
end

这会循环遍历行(从底部开始),并将第二个元素中具有 100 的任何行设置为空集,从而有效地将其删除。

也许您可以将其转换为 r,或者它可能会帮助遇到此问题的其他人。

选项 2

logicalIndex=(A(:,2)==100);
A(logicalIndex,:)=[];

这首先在第二列中找到 100 行,然后将它们全部删除。

于 2013-01-23T19:17:43.193 回答