2016-03-19 11 views
-1

私は2つのデータフレームdf1とdf2を持っています。値がRであるかどうかをチェックする

DF1:

col1 <- c('30','30','30','30') 
col2 <- c(3,13,18,41) 
col3 <- c("heavy","light","blue","black") 
df1 <- data.frame(col1,col2,col3) 

>df1 
    col1 col2 col3 
1 30 3 heavy 
2 30 13 light 
3 30 18 blue 
4 30 41 black 

DF2:私が言うスクリプトのビットを書いた

col1 <- c('10',"NONE") 
col2 <- c(21,"NONE") 
col3 <- c("blue","NONE") 
df2 <- data.frame(col1,col2,col3) 

>df2 
    col1 col2 col3 
1 10 21 blue 
2 NONE NONE NONE 

。 col3の値が "light"に等しい場合、その行とそれ以降のすべての行をデータフレーム内で削除します。だから、DF1は、次のようになります。

col1 col2 col3 
1 30 3 heavy 

と(それがcol3というにおける「光」にマッチ何を持っていないとして)DF2には変更はないだろう。

上記の2つの別々のdfが2つの例として記載されていますが、下のスクリプトは、df1をdf2で繰り返して同じコードを2回コピーして貼り付けるのを防ぐための一般的な "df"

phrase=c("light") 
start_rownum=which(grepl(phrase, df[,3])) 
end_rownum=nrow(df) 
end_rownum=as.numeric(end_rownum) 
if(start_rownum > 0){ 
    df=df[-c(start_rownum:end_rownum),] 
} 

このスクリプトは、start_rownumに数値があるため、df1で正常に動作します。しかし、私はDF2と、次のエラーを取得:

Error in start_rownum:end_rownum : argument of length 0 

の代わりに「(start_rownum> 0)場合は、」言っては、start_rownumが数値を持っているかどうかを確認するためにいくつかの方法がありますか?私は解決策を見つけることができません。

ありがとうございました。同様の問題を抱えている人のため

+1

を使用します) '。インポートするデータの場合は、インポート中に 'na.string'パラメータを設定します。次に、列は数値になり、Rは 'na.omit'や' is.na'のような 'NA'値を扱うための多くの機能を提供します。 – Roland

答えて

2

、私はそれを解決:

は、代わりに ` "NONE"`を使用 `NA`、例えば、` C(10、NAのフレーズ

if (length(start_rownum)>0 & is.numeric(start_rownum)) 
関連する問題