我有这个数据集,我正在检查以确认每只动物的ID在多年内是否正确。为此,我使用以下代码在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
答案 0 :(得分:1)
grepl
函数的模式没有矢量化。为了使模式参数成为&#34;矢量化&#34;在匹配字符向量中的任何项目的意义上,您需要将它们与正则表达式&#34; |&#34; -operator绑定在一起,因此grepl的模式参数应为:
paste0( keywords, collapse="|")
使用它的另一种方法(如果关键字是一个很长的向量,可能很有用):
any( sapply( keywords, grepl, x=Comments) )