R如何在if语句中使用grep

时间:2015-02-07 17:00:15

标签: r if-statement grepl

在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布尔值,因此应该可以接受,但我遗漏了一些东西(或很多)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:16)

你可以使用grepl和ifelse语句:

> color = c("AliceBlue", "BlueViolet", "DarkRed", "MediumVioletRed")
> ifelse(grepl("Red",color),"red","other")
[1] "other" "other" "red"  "red" 

答案 1 :(得分:3)

此任务不需要ififelse。您可以使用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