【问题标题】:Searching for keywords in the comments of a data frame在数据框的注释中搜索关键字
【发布时间】:2018-05-11 22:28:04
【问题描述】:

我有这个数据集,我正在检查它以确认每只动物的 ID 多年来是否正确。为此,我正在使用以下代码在 Excel 文件中的 cmets 中搜索关键字:

    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

我需要在cmets中搜索数据框中的所有关键字,如何搜索多个单词?

更新:当我使用以下代码时,输​​出中未标识所有参数。我究竟做错了什么?例如,不读取“已发布”。

 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

【问题讨论】:

  • 我查看了您编辑的 questipn,但看不到您使用我提供的代码在哪里创建了关键字模式。您从未提供过您所称的“Excel 文件”的完整示例
  • 我想通了——问题是collapse =“|”中的空格。它应该是collapse =“|”。不过感谢您的帮助。
  • 我的回答从不collapse参数中有空格。
  • 那一定是我弄错了
  • 您可能被代码块中使用的等宽字体与 SO 使用的“常规”文本部分中的比例间距之间的明显间距差异所误导。我同意在代码段中该“管道”周围出现空格,但如果您从中复制它们就不存在了。

标签: r text data-cleaning


【解决方案1】:

grepl 函数在其模式中未矢量化。为了在匹配字符向量中的任何项目的意义上使模式参数“矢量化”,您需要将它们与正则表达式“|”-运算符绑定在一起,因此您的 grepl 模式参数应该是:

 paste0( keywords, collapse="|")

另一种使用方式(如果关键字是一个非常长的向量,可能很有用):

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

【讨论】:

  • 当我使用更新后的代码时,输​​出会根据关键字向量的开头词而有所不同 - 你知道为什么会这样吗?
  • 如果没有示例,我认为不可能给出答案。
  • 我意识到我编辑了你的答案,抱歉。我已经更新了我上面的问题 - 任何帮助将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 2014-09-02
相关资源
最近更新 更多