如果行包含特定文本,则返回值

时间:2020-08-20 13:06:40

标签: r

我有以下数据框

  ID Combination 
1  1        Blue        
2  2         Red        
3  3       Green        
4  4 Blue, Green        
5  5  Green, Red        
6  6   Red, Blue        

我尝试创建一个新列“ New”,当“组合”一词中包含“绿色”时显示“有绿色”,当该词不在其中时显示“无绿色”。

df$New = ifelse(df$Combination <= "Green", "it has green", "no green")

  ID Combination          New
1  1        Blue it has green
2  2         Red     no green
3  3       Green it has green
4  4 Blue, Green it has green
5  5  Green, Red     no green
6  6   Red, Blue     no green

3 个答案:

答案 0 :(得分:0)

您可以使用grepl()来查找单词是否出现在您的值中:

df$New = "no green"
df$New[grepl("Green",df$Combination)] = "it has green"

这首先创建默认大小写(无绿色),然后转换与包含“绿色”的组合相对应的所有值。

答案 1 :(得分:0)

也许我们可以尝试使用grepl

within(
  df,
  New <- c("no green", "it has green")[1 + grepl("green", Combination, ignore.case = TRUE)]
)

这样

  ID Combination          New
1  1        Blue     no green
2  2         Red     no green
3  3       Green it has green
4  4 Blue, Green it has green
5  5  Green, Red it has green
6  6   Red, Blue     no green

数据

df <- structure(list(ID = 1:6, Combination = c("Blue", "Red", "Green", 
"Blue, Green", "Green, Red", "Red, Blue")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))

答案 2 :(得分:0)

您的方法对文本使用逻辑比较,在这种情况下,只要向量的第一个字母为<=到“绿色”的第一个字母,就可以为真。有点奇怪的比较!

要使其更好地用于文本比较,您想对字符向量使用更友好的内容。

您可以使用stringr::str_contains函数,这可以允许您执行此操作,也可以使用内置的正则表达式支持,例如grepl,它会检查向量中的字符串“ green”并返回{{ 1}}(如果找到)。

您可以通过以下方法完成后者:

TRUE
相关问题