这似乎很明显,但我无法在任何地方找到答案。
我有两列(Col1,Col2)。我想检查Col1的每一行是否与几个关键字匹配,如果我找到匹配项,请在Col2中写一些内容。我是这样做的:
df$Col2[df$Col1=="Bob"]<-"Boy's name"
我遇到的问题是我有很多不同的名字要检查,所以我最终会得到一个巨大的陈述:
df$Col2[df$Col1=="Bob" | df$Col1=="Tom" | df$Col1=="Dick" | df$Col1=="Harry"]<-"Boy's name"
我更愿意这样做:
df$Col2[df$Col1=="Bob|Tom|Dick|Harry"]<-"Boy's name"
上述语句运行没有错误,但它也不起作用:它不向COl2写入任何内容。我猜它没有正确评估“Bob | Tom | Dick | Harry”位。我做错了什么?
答案 0 :(得分:2)
根据@dickoa的建议,您可以使用%in%
关键字,您可以执行以下操作
condition <- df$col1 %in% c("Bob" , "Tom" , "Dick" , "Harry")
df$col2[condition] <- "Boy's name"
condition <- df$col1 %in% c("Bob" , "Tom" , "Dick" , "Harry")
的如果匹配以下任何名称df$col1
,它将检查Bob" , "Tom" , "Dick" , "Harry
中的每个值
如果找到匹配,则返回True
,如果没有,则返回false
。
因此,结果现在将是True
和false
的值向量。
当您将结果向量作为索引传递给df$col2
时,它只会给df$col2
中与True
的值匹配且忽略false
值的值,所以现在你可以编辑这些值