Как искать названия округов в столбце описания с несколькими строками — R

#r #if-statement #apply #any

Вопрос:

У меня есть набор данных для пожертвований с полем под названием «Описание», в котором донор описал, за что он сделал свой подарок. В этом поле содержится несколько слов или строк (иногда полное предложение), а в нескольких строках перечислены конкретные округа, в которых они хотели, чтобы их пожертвование было указано.

Я хотел бы определить, в каких строках в этом поле есть название округа, и указать это как-то в новом поле. У меня есть фрейм данных с названиями округов из двух нужных мне штатов, но я изо всех сил пытаюсь понять, какой код позволяет мне использовать поле округа в фрейме данных округа в качестве основы для идентификации названий округов в поле описания.

Я все еще на низком уровне в R, но я постараюсь дать несколько примеров кода. У меня более 1000 строк, поэтому мне потребуется слишком много времени для поиска конкретных округов в строке — будет более полезно использовать список округов в качестве основы для поиска.

 `df <- tibble(`Donor Type` = c("Single Donation", "Grant", "Recurring Donation"), Amount = c("10", "50", "100"), Description = c("This is for Person County", "Books for Beaufort County", "Brews for Books"))`

`Donor Type`       Amount Description              
  <chr>              <chr>  <chr>                    
1 Single Donation    10     This is for Person County
2 Grant              50     Books for Beaufort County
3 Recurring Donation 100    Brews for Books
 

У меня есть фрейм данных с названиями округов в двух штатах (по имени Каролина.Округи ниже)- какой код я должен использовать, чтобы сделать дополнительную колонку во фрейме данных донора, указывающую, какие описания были ограничены конкретным округом? Я играл со следующим — но не получаю правильных результатов.

 Df <- 
  apply(Df, 1, function(x) 
    ifelse(any(Df$Description %in% Carolina.Counties$county), 'yes','no'))
 

Ответ №1:

%in% будет искать точное совпадение. Вам может понадобиться какое-то соответствие регулярному выражению, которое может быть достигнуто с помощью grepl .

 df$result <- ifelse(grepl(paste0(Carolina.Counties$county, collapse = '|'), 
                    df$Description), 'Yes', 'No')
 

paste0(Carolina.Counties$county, collapse = '|') создаст единый шаблон регулярного выражения для поиска по всем округам. Мы ищем этот шаблон в Description столбце, если он существует, назначаем «Да», иначе «Нет».

Комментарии:

1. Это сработало! Большое вам спасибо за вашу помощь!