我想使用以下标准从大矩阵中删除行:
应删除第二列中包含 100 的任何行。
如何才能做到这一点?我知道如何选择这些行,但我不确定如何使用规则删除它们。
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
注意这些索引(!
和-
)的不同用途。
这是我在 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 行,然后将它们全部删除。