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