2017-01-17 11 views
0

私は以下の特性を持つデータフレームを持っています。grepとrとの数値比較を組み合わせる

names<-c("test1", "test2", "test3", "not4", "test5") 
age<-as.numeric(c(1,2,3,4,5)) 
identifier<-as.numeric(c(0,0,0,0,0)) 

df<-data.frame(names,age, identifier) 

次のコードを使用して、testやage> = 3のような名前を含む行に対して識別子を1に設定しようとしています。

df$identifier[grep(".*test.*", df$names) & df$age>=3,]<-1 

Error in df$identifier[grep(".*test.*", df$names) & df$age >= 3, ] : 
    incorrect number of dimensions 
In addition: Warning message: 
In grep(".*test.*", df$names) & df$age >= 3 : 
    longer object length is not a multiple of shorter object length 

次のコードは、あなたが余分を追加するので、あなたのコードがエラーを与えた

df[grep(".*test.*", df$names) & df$age>=3,] 
    names age identifier 
3 test3 3   0 
4 not4 4   0 
5 test5 5   0 

Warning message: 
In grep(".*test.*", df$names) & df$age >= 3 : 
    longer object length is not a multiple of shorter object length 
+1

あなたのコードは、 '[]'の中に余分な '、'を追加したのでエラーが発生しました。これは、行インデックスでサブセット化しようとするときに必要です。 –

+1

@ joel.wilsonが答えになるはずです。 –

答えて

1

(のみテスト3と5が選択されている必要があります。)誤った出力で、どちらか動作するようには思えません、内部[]。行インデックスをサブセット化しようとするときに必要です。ここではベクトルをサブセット化しようとしています。そのため、行/列のインデックスはありません

df$identifier[grepl("test", df$names) & df$age >=3] = 1 
関連する問題