我有以下数据框
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
答案 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