Поиск по ключевым словам в комментариях фрейма данных - PullRequest
0 голосов
/ 12 мая 2018

У меня есть этот набор данных, который я проверяю, чтобы подтвердить правильность идентификатора каждого животного по годам. Для этого я ищу в комментариях в файле Excel ключевые слова, используя этот код:

    do.call(rbind,breeder[-1]) %>%   
                select(Year, `Old Tag`, Tag_11, PIT, Sex  Orig, Group,Comments) %>% 
filter(Sex != "m",grepl(keywords, Comments)) %>%   
        arrange(., desc(PIT)) %>%   
        print.data.frame

Вот ключевые слова:

keywords <- c('retag','lost','Was', 'was','original','change','CHANGE','check','CHECK','switched','temp only','should',
              'had tag','new','give','GIVE', 'given','^--', 'tag', 'TAG', 'tags', 'tagged', 'temp', 'Temporarily', 
              'Temporary', 'Released', 'removed', 'Processing', 'processing', 'Processed', 'previously', 'pit', 'pits', 
              'PIT', 'orig', 'original', 'old', 'OLD', 'new', 'New', 'not', 'listed', 'last', 'had', 
              'could', 'Chech', 'assigned')

Однако, когда я запускаю код, R использует только первое слово - «retag», и я получаю следующий вывод:

  Year Old Tag Tag_11              PIT Sex Orig Group                       Comments
1 2015    <NA>    367 <NA>   f c   o Temporary tag -  retag as #3
2 2016    <NA>    367 <NA>   f c   o Temporary tag -  retag as #3
Warning message:
In grepl(keywords, Comments) :
  argument 'pattern' has length > 1 and only the first element will be used

Мне нужно искать в комментариях все ключевые слова во фрейме данных, как вы ищете несколько слов?

Обновление: когда я использую следующий код, все аргументы не идентифицируются в выводе. Что я делаю неправильно? Например, «Выпущено» не читается.

 deadKeywords <- c('died', 'Released', 'processed', 'Processed', 'processing', 'Processing', 'process', 'dead', 'Dead', 'Died') %>% paste0(., collapse = " | ")

 commentSearch <- do.call(rbind,breeder[-1]) %>% 
select(Year, Old Tag, Tag_11, PIT, Sex, Orig, Group, Comments) %>% 
filter(grepl(deadKeywords, Comments)) %>% arrange(., desc(PIT)) %>% 
print.data.frame

1 Ответ

0 голосов
/ 12 мая 2018

Функция grepl не векторизована в своем шаблоне.Для того чтобы аргумент шаблона был «векторизован» в смысле сопоставления с любым из элементов в символьном векторе, вам необходимо связать их вместе с оператором регулярного выражения «|», чтобы аргумент шаблона для grepl должен быть:

 paste0( keywords, collapse="|")

Другой способ использовать это (возможно, полезно, если ключевые слова имеют очень длинный вектор):

any( sapply( keywords, grepl, x=Comments) )
...