结合grep和r中的数值比较

时间:2017-01-17 18:16:48

标签: 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&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

1 个答案:

答案 0 :(得分:1)

您的代码给出了错误,因为您在[]内添加了一个额外的内容。当您尝试对行索引进行子集时,这是必需的。然而,我们在这里尝试对矢量进行子集化。所以没有行/列索引

df$identifier[grepl("test", df$names) & df$age >=3] = 1