【发布时间】:2015-04-07 17:19:33
【问题描述】:
在 RI 中,想要在 if 语句中执行类似下面的示例,我在 mix$color 列中搜索包含单词 red 的任何颜色,并将 mix 数据框中的新变量设置为红色.
mix$newcolor <- if(grep("Red",mix$color) "red"
以下是数据框组合的一些示例数据:
爱丽丝蓝 紫罗兰色 深红 中紫红
我收到此错误消息:
警告信息: 在 if (grepl("deep red", mix$color) == TRUE) "red" : 条件长度 > 1 并且只使用第一个元素
我认为 grepl 应该返回一个 TRUE 或 FALSE 布尔值,这样应该是可以接受的,但我遗漏了一些东西(或很多东西)。
感谢您的帮助。
【问题讨论】:
-
这里需要矢量化的
ifelse,而不是普通的 if 和 else。使用 grepl 时也不需要 == true。 -
是的,这就像一个冠军。我之前曾考虑过使用 ifelse,但在 else 部分被难住了,但我只会为 else 引用 mix$newcolor。它将为空或具有转换后的值。谢谢。
-
ifelse 的一个优点是您可以轻松嵌套它们。假设您要将颜色矢量转换为“纯”颜色:
color = c("AliceBlue", "BlueViolet", "DarkRed", "MediumVioletRed", "DarkGreen"); ifelse(grepl("Red",color),"red",ifelse(grepl("Green",color),"green",ifelse(grepl("Blue",color),"blue","other")))
标签: r if-statement grepl