2017-08-10 4 views
1

たとえば、a、b、c、d、eという5つのリストがあります。リスト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

関連する問題