Ответ 1
вы можете использовать grepl и инструкцию ifelse:
> color = c("AliceBlue", "BlueViolet", "DarkRed", "MediumVioletRed")
> ifelse(grepl("Red",color),"red","other")
[1] "other" "other" "red" "red"
В 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, чтобы оно было приемлемым, но я что-то пропускаю (или много).
Спасибо за вашу помощь.
вы можете использовать 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
для совпадений в верхнем и нижнем регистре.