3

私は4つのリストを持っています

a <- list(1,2,3,4)
b <- list(5,6,7,8)
c <- list(7,9,0)
d <- list(12,14)

どのリストに共通の要素があるか知りたいです。この例では、要素 7 がリストさbc、共通しています。

強引なアプローチは、リストのすべての組み合わせを取り、交差点を見つけることです。Rでそれを行う他の効率的な方法はありますか?

別のアプローチは、すべてのリストから単一のリストを作成し、重複を見つけることです。次に、これらの重複が元のリストからのものであることを示すマッピング関数を使用できます。しかし、それを行う方法についてはよくわかりません。この投稿に出会いました

重複行のインデックスを見つける

これを変更して、重複している実際のリストを見つけられるかどうかを考えていました。

リストの多くのグループに対してこのプロセスを繰り返さなければなりません。どんな提案やアイデアも大歓迎です! 前もって感謝します

4

1 に答える 1

8

この double を使用するのはどうsapplyですか?

l <- list(a,b,c,d)

sapply(seq_len(length(l)), function(x) 
  sapply(seq_len(length(l)), function(y) length(intersect(unlist(l[x]), unlist(l[y])))))
     [,1] [,2] [,3] [,4]
[1,]    4    0    0    0
[2,]    0    4    1    0
[3,]    0    1    3    0
[4,]    0    0    0    2

解釈: たとえば、行列の要素 [1,2] は、リストの最初の要素l(この場合はasublist ) が 2 番目のリスト要素 (つまり、 sublist ) と共通に持っているb要素の数を示します。

または、代わりに、他のサブリストと共通の値を持つサブリストのインデックスを確認するだけです。

which(sapply(seq_len(length(l)), function(x) length(intersect(l[[x]], unlist(l[-x])))) >= 1)
[1] 2 3
于 2015-05-22T22:52:02.583 に答える