【问题标题】:How to remove elements of a list, if that elements are not on another list如何删除列表的元素,如果该元素不在另一个列表中
【发布时间】:2019-10-23 06:56:09
【问题描述】:

基本上,我有一个公司列表(标记为列表 A),我有一个大清单(标记为列表 B)。我想查询列表A的元素是否也在列表B中。一些相同的公司有细微的差异,所以我必须使用模糊匹配。幸运的是,我已经成功找到了在 A 中但不在 B 中的元素。但是我不知道如何删除它而不引起混乱。 (好像很容易引起边界错误)

company <- read.table(text = "
           CompanyName
          'MERCK SHARP & DOHME CORPORATION'
          'GILEAD SCIENCES INC'
          'BOEHRINGER INGELHEIM PHARMACEUTICALS, INC.'
          'ABBVIE, INC.'
          'JANSSEN SCIENTIFIC AFFAIRS, LLC'
          'ASAHI INTECC CO., LTD.'
   ", header = TRUE, stringsAsFactors = FALSE)
Report <- c('MERCK ','BOEHRINGER INGELHEIM','ROCHE','ASAHI')
sapply(lapply(Report, function(x) agrepl(x, company$CompanyName, max.distance=0.1)), max)

上面是我的可重现数据和我的模糊匹配代码,它返回

[1] 1 1 0 1

但我不知道如何删除该 0 职位上的公司。 在每个元素上运行循环是个好主意吗? 我希望我的结果是

'MERCK ','BOEHRINGER INGELHEIM','ASAHI'

【问题讨论】:

  • 目前还不是很清楚你想要得到什么作为最终结果。能详细解释一下吗?
  • 好的,我已经编辑好了

标签: r list


【解决方案1】:

我定义了以下函数,它返回与 z 项目匹配的项目表单 Report

myfunc = function(z){Report[which(lapply(Report,function(y){agrepl(y,z,max.distance = 0.1)})%>%unlist)]}

然后依次应用于列表的每个元素。我使用 magrittr 包中的 unlist 和管道符号 %&gt;% 将列表结构转换为向量。

lapply(company$CompanyName,myfunc) %>% unlist 

如果您希望报告是一个变量,为了将函数用于不同的报告,您可以定义函数

myfunc2 = function(z,report){report[which(lapply(report,function(y){agrepl(y,z,max.distance = 0.1)})%>%unlist)]}

然后使用 Report as 和附加参数调用 lapply

lapply(company$CompanyName,myfunc2,Report) %>% unlist 

【讨论】:

  • 好吧,如果我有报告列表,我可以将您的函数插入循环吗?
  • @Cooper 我修改了我的答案来处理这个案例。
猜你喜欢
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多