#r #if-statement
Вопрос:
У меня есть фрейм данных с переменной, которая состоит из строк названий продуктов. Например.:
| Names | Price ...| |-----------------------------|----------| | milk | ... | | pizza with tomato | ... | | tuna with olive and beans | ... | | etc... | ... |
Я хотел бы создать другую переменную, которая принимает в качестве значений имена, хранящиеся в векторе, которые соответствуют именам в переменной Names
В принципе, если у меня есть вектор:
x lt;- c("milk", "pizza", "tuna")
Код должен заглянуть в переменную Names
, и если он найдет совпадение в векторе x
, то он примет это значение и сохранит его в новой переменной, tag
которая должна иметь значения milk
, pizza
, tuna
.
Можно ли создать переменную, значения которой берутся из другой переменной, если выполняются условия?
Комментарии:
1. Пожалуйста, включите первый фрейм данных в качестве объекта r, как вы сделали для вектора x, чтобы сделать вопрос воспроизводимым. Также было бы очень полезно, если бы вы могли включить фрейм данных, показывающий ожидаемый результат, и любой код, который вы пытались показать, где у вас возникли проблемы.
Ответ №1:
Если я правильно понимаю, вы хотите иметь тег (например, ключевое слово) в новом столбце в вашем фрейме данных. Если это так, то, вероятно, проще просто извлечь слово, если оно встречается в вашем списке поиска с помощью str_extract
.
library(stringr) search lt;- c("milk", "pizza", "tuna") df$tag lt;- stringr::str_extract(df$Names, paste(search, collapse="|"))
Выход
Names price tag 1 milk 3.99 milk 2 pizza with tomato 5.99 pizza 3 tuna with olives and beans 9.99 tuna 4 crab 4.99 lt;NAgt;
Данные
df lt;- structure(list( Names = c("milk", "pizza with tomato", "tuna with olives and beans", "crab"), price = c(3.99, 5.99, 9.99, 4.99), tag = c("milk", "pizza", "tuna", NA) ), row.names = c(NA,-4L), class = "data.frame")
Комментарии:
1. Спасибо, Эндрю, это решило мою проблему! Я использовал str_extract в части своего сценария, чтобы отшлифовать свой фрейм данных, но почему-то мне не пришло в голову использовать его, как это сделали вы. Сообщество r потрясающее. Еще раз большое вам спасибо!