R как использовать grep в операторе if

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

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

А вот некоторые примеры данных для набора данных:

AliceBlue BlueViolet DarkRed Средне-фиолетовый Красный

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

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

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

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

2 ответа

Решение

Вы можете использовать grepl и оператор ifelse:

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

Вам не нужно 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 для прописных и строчных букв.

Другие вопросы по тегам