2016-10-05 3 views
1

をなし整数を含まない行を削除::私のデータフレームDFは、以下のように見えるデータフレームから(文字は、IEなど)

Variable A Variable B Variable C 
9   2   1 
2   0   don't know 
maybe  1   1 
?   0   3 

をIは、非数値が使用されているすべての行を削除する必要があります。これは、その後、次のようになります。

Variable A Variable B Variable C 
9   2   1 

を私は

df[! grepl(*!= numerical*, df),] 

または

df[! df %in% *!= numerical*, ] 

のようなものを考えましたが、私は、私は「すべて取るための入力として使用することができます何かを見つけることはありません数値と一致しません "。手伝っていただけませんか? ありがとう!

答えて

3

一つの選択肢は、それがReduce&listの対応する要素を比較し、(!)、is.naとNAをチェックするすべての非数値要素がNAに変換するようnumericに変換し、列をループすることが否定するだろう行をサブセット化するためにそれを使用します。

df[Reduce(`&`, lapply(df, function(x) !is.na(as.numeric(x)))),] 
+0

私は 'df [] = sapply(df、as.numeric)'と 'na.exclude(df)'を考えていましたが、これはあなたの 'Reduce'アプローチに比べて欠点がありますか? – jakub

+0

@ jakub、私があなたのアプローチに見える唯一の欠点は、 'data.frame'の代わりに' matrix'オブジェクトを返すことです。 – Benjamin

+0

ありがとう!これはうまくいきます:) – user6925545

0

これは、これを実行する最善の方法ではないかもしれませんが、機能します。

君のデータ -

contains <- lapply(seq_len(nrow(s)), function(i){ 
    yes <- grep("[^0-9.]" , s[i,]) #regex for presence of non-digits 
    ifelse(identical(yes, integer(0)),F,T) 
}) %>% unlist 


s <- s[which(!contains),] 

感謝を含んでDFです!

関連する問題