web-dev-qa-db-ja.com

複数のベクトルから共通の要素を見つける方法は?

誰もが複数のベクトルから共通の要素を見つける方法を教えてもらえますか?

a <- c(1,3,5,7,9)
b <- c(3,6,8,9,10)
c <- c(2,3,4,5,7,9)

上記のベクトルから共通の要素を取得したい(例:3および9)

132
Chares

これについては賢い方法があるかもしれませんが、

intersect(intersect(a,b),c)

仕事をします。

編集:より巧妙に、そしてあなたが多くの議論を持っているならより便利に:

Reduce(intersect, list(a,b,c))
278
bnaul

既に良い答えですが、これを行うには他の方法がいくつかあります。

unique(c[c%in%a[a%in%b]])

または、

tst <- c(unique(a),unique(b),unique(c))
tst <- tst[duplicated(tst)]
tst[duplicated(tst)]

uniquea、またはb内に繰り返される値がないことがわかっている場合は、c呼び出しを明らかに省略できます。

16
James
intersect_all <- function(a,b,...){
  all_data <- c(a,b,...)
  require(plyr)
  count_data<- length(list(a,b,...))
  freq_dist <- count(all_data)
  intersect_data <- freq_dist[which(freq_dist$freq==count_data),"x"]
  intersect_data
}


intersect_all(a,b,c)

更新編集シンプルなコード

intersect_all <- function(a,b,...){
  Reduce(intersect, list(a,b,...))
}

intersect_all(a,b,c)
5