2010-09-12 72 views
94

誰能告訴我如何從多個向量中找到共同的元素?如何從多個向量中找到共同元素?

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

我想從上述載體的共同元素(例如:3和9)

+24

這不是使用'C'變量名是個好主意... – Marek 2010-09-13 11:05:33

+1

它爲什麼像其他人一樣的信? – 2016-05-27 12:02:30

+4

@DimitriPetrenko,因爲你可以用'c(1,2 ...)'聲明列表。 – Mathias711 2016-08-29 12:20:14

回答

210

有可能是去了解這個聰明的方式,但

intersect(intersect(a,b),c) 

會做工作。

編輯:更巧妙,更方便,如果你有很多的爭論:

Reduce(intersect, list(a,b,c)) 
+5

+1提醒我們關於'Reduce'和正確的R大寫! – mariotomo 2011-08-12 12:01:32

+3

值得注意的是'intersect'是用於設定操作的。如果元素在矢量中重複出現,則會失去此信息,因爲矢量在相交之前變成集合。例如。 '相交(c(1,1,2,3),c(1,1,3,4))'會導致'c(1,3)',你可能想要結果'c(1, 1,3)'。 – 2016-10-13 12:59:47

12

一個很好的答案了,但也有一些其他的方法可以做到這一點:

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

,或者

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

可以很明顯的忽略unique電話,如果你知道有沒有在a,bc內重複的值。

2
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) 

UPDATE編輯 一個簡單的代碼

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

intersect_all(a,b,c) 
相關問題