Используйте grepl, чтобы назвать переменную

У меня есть следующий кадр данных

amount <- c(10,12,14)
description <- c("bankafschrift", "ABN", "albert heijn") 
df <- data.frame(description, amount)


head(df)
description amount
1 bankafschrift     10
2           ABN     12
3  albert heijn     14

Теперь я хочу немного заняться текстовым анализом, назначая сообщения для строк на основе слов в их описании. Итак, описание, содержащее: «bankafschrift», я хочу объявить как «Банк». Я знаю, как получить значение true/false следующим образом:

 df$post <- grepl('A

Что дает мне:

   description amount  post 
1 bankafschrift     10 FALSE       
2           ABN     12  TRUE         
3  albert heijn     14 FALSE       

Но я хочу, чтобы в сообщении было написано «продукты» на случай, если утверждение grepl верно. Любые предложения о том, как это сделать?

И сверху это:

Если я хочу больше элементов для определения поста, как мне использовать список?

Если сделать это:

 bank_items <- c("Bank", "ABN")
 f$post <- grepl(bank_items,df$description)

Это дает мне следующую ошибку:

Warning message:
In grepl(bank_items, df$description) :
argument 'pattern' has length > 1 and only the first element will be used

person Marc van der Peet    schedule 20.11.2015    source источник
comment
Вы уверены, что это правильный путь решения этой проблемы? Возможно, справочная таблица может быть проще, если у вас много разных описаний и/или категорий.   -  person Heroka    schedule 20.11.2015


Ответы (1)


Мы можем paste объединить 'bank_items' и использовать их как pattern в grepl.

 i1 <- grepl(paste(bank_items, collapse='|'), df$description)
 ifelse(i1, 'Bank cost', 'Not Bank cost')
person akrun    schedule 20.11.2015
comment
милое спасибо. И ты тоже знаешь, как решить мою первую задачу? - person Marc van der Peet; 20.11.2015
comment
@MarcvanderPeet Извините, в чем первая проблема. - person akrun; 20.11.2015
comment
Я не хочу говорить правду или ложь, но в случае, если grepl(paste(bank_items, свернуть = '|'), df$description) верно, я хочу, чтобы df$post был стоимостью банка - person Marc van der Peet; 20.11.2015
comment
@MarcvanderPeet Обновил сообщение. - person akrun; 20.11.2015