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