2017-06-19 7 views
0

これはほぼ確実に重複した質問ですが、どこにいても答えは見つかりません。その他の同様の質問のほとんどは、データフレーム全体ではなく、1つの列からのサブセット化に関連しています。r:任意の列に数字が含まれている行を削除してください

  A  B   C 
2 0.48845 5.7892 0.3145 
3 0.27828 0.4687 0.0641 

を私が確信している:

test = data.frame(
'A' = c(.31562, .48845, .27828, -999), 
'B' = c(.5674, 5.7892, .4687, .1345), 
'C' = c(-999, .3145, .0641, -999)) 

が、私は私のデータフレームは、次のようになりますように任意の列は、-999が含まれている行をドロップしたい:

は、私がデータフレームを持っていますsubset()関数またはapply()でこれを行う簡単な方法ですが、わかりません。

私はこの試み:

test[apply(test, MARGIN = 1, FUN = function(x) {-999 != x}), ] 

をしかし、それは返し:

   A  B   C 
1  0.31562 0.5674 -999.0000 
2  0.48845 5.7892 0.3145 
4 -999.00000 0.1345 -999.0000 
NA   NA  NA  NA 
NA.1   NA  NA  NA 
NA.2   NA  NA  NA 
NA.3   NA  NA  NA 
NA.4   NA  NA  NA 
NA.5   NA  NA  NA 
+2

'テストに使用することができます[を!、(テスト、1、機能(r)は任意の(Rの== -999))を適用]あなたがでこれに対処することができ – bouncyball

+1

'初期段階:set 'na.strings =" - 999 "'で読み込むとき。その後、欠落している行を削除するための通常のツールを使用することができます。 – user20650

+0

'rowSums'では' test [rowSums(test == -999)== 0、] 'を実行できますが、read引数に' na.strings'を使うのが良い選択です。 – lmo

答えて

2

使用arr.indwhich-999が存在する行(which(test == -999, arr.ind = TRUE)[,1])を取得し、それらの行を削除します。

test[-unique(which(test == -999, arr.ind = TRUE)[,1]),] 
#  A  B  C 
#2 0.48845 5.7892 0.3145 
#3 0.27828 0.4687 0.0641 
0

我々はReduce

test[!Reduce(`|`, lapply(test, `==`, -999)),] 
#  A  B  C 
#2 0.48845 5.7892 0.3145 
#3 0.27828 0.4687 0.0641 
関連する問題