我有一个具有以下特征的数据框。
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&gt; = 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
以下代码似乎也不起作用,输出不正确(只应选择测试3和5)。
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
答案 0 :(得分:1)
您的代码给出了错误,因为您在[]内添加了一个额外的内容。当您尝试对行索引进行子集时,这是必需的。然而,我们在这里尝试对矢量进行子集化。所以没有行/列索引
df$identifier[grepl("test", df$names) & df$age >=3] = 1