誰能告訴我如何從多個向量中找到共同的元素?如何從多個向量中找到共同元素?
a <- c(1,3,5,7,9)
b <- c(3,6,8,9,10)
c <- c(2,3,4,5,7,9)
我想從上述載體的共同元素(例如:3和9)
誰能告訴我如何從多個向量中找到共同的元素?如何從多個向量中找到共同元素?
a <- c(1,3,5,7,9)
b <- c(3,6,8,9,10)
c <- c(2,3,4,5,7,9)
我想從上述載體的共同元素(例如:3和9)
有可能是去了解這個聰明的方式,但
intersect(intersect(a,b),c)
會做工作。
編輯:更巧妙,更方便,如果你有很多的爭論:
Reduce(intersect, list(a,b,c))
+1提醒我們關於'Reduce'和正確的R大寫! – mariotomo 2011-08-12 12:01:32
值得注意的是'intersect'是用於設定操作的。如果元素在矢量中重複出現,則會失去此信息,因爲矢量在相交之前變成集合。例如。 '相交(c(1,1,2,3),c(1,1,3,4))'會導致'c(1,3)',你可能想要結果'c(1, 1,3)'。 – 2016-10-13 12:59:47
一個很好的答案了,但也有一些其他的方法可以做到這一點:
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
,b
或c
內重複的值。
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)
這不是使用'C'變量名是個好主意... – Marek 2010-09-13 11:05:33
它爲什麼像其他人一樣的信? – 2016-05-27 12:02:30
@DimitriPetrenko,因爲你可以用'c(1,2 ...)'聲明列表。 – Mathias711 2016-08-29 12:20:14