比较两个列表并显示不匹配的元素

时间:2016-05-18 13:35:34

标签: r

我有两个列表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只有一个列表项,它有几个字符串。我想将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()但是没有成功。请帮忙。

1 个答案:

答案 0 :(得分: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))
   })