R как использовать команду grep in if

В RI вы хотите сделать что-то подобное в выражении if, например, в примере ниже, где я ищу любые цвета в столбце цвета $mix, в котором содержится слово red и установка новой переменной в фрейме данных смешивания на красный цвет.

mix$newcolor <- if(grep("Red",mix$color) "red"

И вот некоторые примеры данных для схемы dataframe:

AliceBlue Сине-фиолетовый Темно-красный MediumVioletRed

Я получаю это сообщение об ошибке:

Предупреждающее сообщение: В if (grepl ( "deep red", mix $color) == TRUE) "red": условие имеет длину > 1, и будет использоваться только первый элемент

Я думаю, что grepl должен возвращать логическое значение TRUE или FALSE, чтобы оно было приемлемым, но я что-то пропускаю (или много).

Спасибо за вашу помощь.

Ответ 1

вы можете использовать grepl и инструкцию ifelse:

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

Ответ 2

Для этой задачи вам не нужны 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 для совпадений в верхнем и нижнем регистре.