2016-05-18 193 views
0

我有兩個列表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

請'dput'的對象,或更好的,一個簡單的例子,可以完全融入你的問題。你的討論和代碼對我沒有意義。你真的需要名稱爲「list_a」和「a」的對象嗎? – Frank

+0

對此感到抱歉。我已經做了更正。 – ron

回答

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)) 
    }) 
+0

該代碼給出了不匹配元素的數量。我需要隨着計數的元素。 – ron

相關問題