2

さまざまな数の列と行を持つ大きなデータ フレームがあります。データ フレームで特定のベクトルの値を検索し、この特定のベクトルの値に一致するセルの行を削除します。for変数の行と列の複数のデータ フレームで実行する必要があり、ループを避けたいので、これを関数として使用したいと思います。

例えば

ff<-structure(list(j.1 = 1:13, j.2 = 2:14, j.3 = 3:15), .Names = c("j.1","j.2", "j.3"), row.names = c(NA, -13L), class = "data.frame")

値を含むセルを持つすべての行を削除します8,9,10

ff[ !ff[,1] %in% c(8, 9, 10), ]または使用できると思いますsubset(ff, !ff[,1] %in% c(8,9,10) )

しかし、データセットからすべての値を削除するには、各列を解析する必要があります (おそらくforループを使用して、回避したいことです)。

他の(よりクリーンな)方法はありますか?

どうもありがとう

4

2 に答える 2

7

apply各行へのテスト:

keeps <- apply(ff, 1, function(x) !any(x %in% 8:10))

これはブールベクトルを与えます。次に、それをサブセット化します。

ff[keeps,]

   j.1 j.2 j.3
1    1   2   3
2    2   3   4
3    3   4   5
4    4   5   6
5    5   6   7
11  11  12  13
12  12  13  14
13  13  14  15
> 
于 2012-06-12T20:27:23.143 に答える
4

このapply戦略が最も経済的であることが判明するかもしれませんが、次のいずれかを行うこともできます。

 ff[ !rowSums( sapply( ff, function(x) x %in% 8:10) ) , ]
ff[ !Reduce("+", lapply( ff, function(x) x %in% 8:10) ) , ]

論理ベクトルのベクトル加算 ( と同等any) とその後の否定。最初の方が早いと思います。

于 2012-06-12T20:56:52.803 に答える