0

次の基準を使用して、大きなマトリックスから行を削除したいと思います。

2 列目に 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で行う方法ですA

オプション1

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

これは行を (一番下から) ループし、2 番目の要素が 100 の行を空のセットに設定し、効果的に削除します。

これを r に変換できるかもしれませんし、この問題を抱えている他の誰かを助けるかもしれません。

オプション 2

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

これは、最初に 2 列目に 100 がある行を見つけてから、それらをすべて削除します。

于 2013-01-23T19:17:43.193 に答える