Как создать переменную, значение которой берется из другой переменной, соответствующей значениям вектора

#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 потрясающее. Еще раз большое вам спасибо!