2017-08-10 56 views
1

例如說,我有5個列表,名爲a,b,c,d,e。列表a包含[1,2,3,4,5],列表b包含[2,3,4,5,6],列表c包含[2,3,5,6,7],列表d包含[2 ,4,5],列表e包含[3,5,7]。如何從列表中刪除一個值,如果它沒有出現在任何其他列表中

我使用的數據更加複雜,所以我需要找到一種方法來讀取每個列表中的每個值,檢查它是否存在於任何其他列表中,如果沒有,請將其從原始列表中刪除。所以當它讀取列表a時,它看到「1」不存在於任何其他列表中,因此應該從列表a中刪除「1」。

我該怎麼做呢?

謝謝!

+3

請分享一些重複性的數據和預期輸出 – Sotos

+0

你如何認識元素,按名稱? –

+1

通常,您可以使用'%in%'條件來測試值是否存在於值的向量中。輸出將是布爾值,您可以使用它來刪除'FALSE'個案。簡短例子:'sapply(b,function(x)x%in%c)'會輸出TRUE TRUE FALSE TRUE TRUE。 – LAP

回答

2
# assuming you have a list of lists 
a=list(1, 2, 3, 4, 5);b=list(2, 3, 4, 5, 6);c=list(2, 3, 5, 6, 7);d=list(2,4,5);e=list(3,5,7) 
my_list = list(a,b,c,d,e) 

# first unlist each list 
my_list = lapply(my_list,unlist) 


n=length(my_list) 
new_list = lapply(seq(n), function(x) 
        {my_list[[x]][my_list[[x]] %in% unlist(my_list[-x])]}) 

輸出:

[[1]] 
[1] 2 3 4 5 

[[2]] 
[1] 2 3 4 5 6 

[[3]] 
[1] 2 3 5 6 7 

[[4]] 
[1] 2 4 5 

[[5]] 
[1] 3 5 7 
+2

稍微簡單一些,將函數設置爲%unlist(myList [-x])]'myList [[x]] [myList [[x]]%]。 – lmo

+0

謝謝,這的確更簡單!相應地修改答案。 – Florian

0

像這樣:

a <- c(1, 2, 3, 4, 5) 
b <- c(2, 3, 4, 5, 6) 
c <- c(2, 3, 5, 6, 7) 
d <- c(2, 4, 5) 
e <- c(3, 5, 7) 

僅保留在其他載體中的值:

a[a %in% b | a %in% c | a %in% d | a %in% e] 
[1] 2 3 4 5 
+0

當有數百個列表時會發生什麼? – Sotos

+1

這個帖子特別說有5個清單 – trosendal

+0

5個清單作爲例子......這個帖子說了,我引用,「*說例如,我有5個清單*」。此外,您應該小心不要過度適應答案,因爲您的解決方案可以幫助更多具有相同問題的人。另一個人可能與1000個列表有同樣的問題。 – Sotos

相關問題