在RI中想在if语句中做类似下面的例子,我在mix $ color列中搜索包含单词red的任何颜色,并在mix数据框中将新变量设置为红色
mix$newcolor <- if(grep("Red",mix$color) "red"
以下是数据帧混合的一些示例数据:
艾莉斯蓝 紫罗兰色 深红 暗紫
我收到此错误消息:
警告讯息: if(grepl(“deep red”,mix $ color)== TRUE)“red”:条件长度> gt; 1,只使用第一个元素
我认为grepl应该返回一个TRUE或FALSE布尔值,因此应该可以接受,但我遗漏了一些东西(或很多)。
感谢您的帮助。
答案 0 :(得分:16)
你可以使用grepl和ifelse语句:
> color = c("AliceBlue", "BlueViolet", "DarkRed", "MediumVioletRed")
> ifelse(grepl("Red",color),"red","other")
[1] "other" "other" "red" "red"
答案 1 :(得分:3)
此任务不需要if
或ifelse
。您可以使用sub
:
color <- c("darkred", "indianred", "violetred", "deep red",
"Orange Red", "blue", "yellow")
sub(".*red.*", "red", color, ignore.case = TRUE)
# [1] "red" "red" "red" "red" "red" "blue" "yellow"
sub
命令用"red"
替换所有字符串,包括子串"red"
。此外,我为大小写匹配指定了ignore.case = TRUE
。