【问题标题】:Comparing two lists and displaying the non-matching elements比较两个列表并显示不匹配的元素
【发布时间】:2016-05-18 13:35:33
【问题描述】:

我有两个列表 list_a 和 list_b。列表结构如下

> list_b[1]
 [[1]]
 [1] ORANGE    COLUMNS        BLACK       BLUE    TRIGGER       
 [6] GREEN     DRAUGHT

 > list_a[1]
 [[1]]
 [1] RED       SPARROW         HAWK      TRIGGER     BLUE       
 [6] ORANGE     COLUMNS        TIGER      CAMEROON   BULLSEYE

> length(list_a)
[1] 1012
> length(list_b)
[1] 1

正如我们所见,list_b 只有 1 个包含多个字符串的列表项。我想将 list_b[1] 的每个元素与 list_a 的所有项目进行比较,即将 list_b[1] 与 list_a[1];list_b[1] 与 list_a[2];... 等进行比较。字符串出现在 list_b[1] 和 list_a[1:1012] 中的顺序对我来说并不重要。对于每个匹配项,我想查看 list_b[1] 中不匹配的元素数量以及不匹配的元素。因此,list_b[1] 和 list_a[1] 之间的比较应该表明 list_b 中不匹配的元素是 BLACK、GREEN 和 DRAFT,因此不匹配元素的计数是 3。我使用 intersect() 尝试过,但是没有成功。请帮忙。

【问题讨论】:

  • dput 对象,或者更好的更简单的示例,可以完全适合您的问题。您的讨论和代码对我来说没有意义。你真的需要像list_aa 这样名称的对象吗?
  • 抱歉给您带来了困惑。我已经更正了。

标签: r


【解决方案1】:
list_b = list(c('o', 'c', 'bk', 'bl', 't', 'g', 'd'))
list_a = list(c('r', 's', 'h', 't', 'bl', 'o', 'c', 'ti', 'ca', 'bu'),
              c('r', 's', 'h', 't', 'bl', 'o', 'c', 'ti', 'ca', 'bu'))
lapply(list_a, function(a) {
  b = list_b[[1]]
  non.matching = setdiff(b, a)
  return(c(length(non.matching), non.matching))
})

lapply(list_a, function(a) {
      b = list_b[[1]]
      non.matching = setdiff(b, a)
     return(list(num = length(non.matching), elements = non.matching))
   })

【讨论】:

  • 这段代码给出了不匹配元素的数量。我想要元素和计数。
猜你喜欢
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多