测试值是否与值列表匹配

时间:2015-05-13 15:14:21

标签: r syntax equality

这似乎很明显,但我无法在任何地方找到答案。

我有两列(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”位。我做错了什么?

1 个答案:

答案 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。 因此,结果现在将是Truefalse的值向量。

当您将结果向量作为索引传递给df$col2时,它只会给df$col2中与True的值匹配且忽略false值的值,所以现在你可以编辑这些值