提问人:Chares 提问时间:9/13/2010 最后编辑:zx8754Chares 更新时间:1/17/2020 访问量:276458
如何从多个向量中找到共同元素?
How to find common elements from multiple vectors?
问:
谁能告诉我如何从多个向量中找到共同元素?
a <- c(1,3,5,7,9)
b <- c(3,6,8,9,10)
c <- c(2,3,4,5,7,9)
我想从上述向量(例如:3 和 9)中获取公共元素
答:
440赞
bnaul
9/13/2010
#1
可能有一种更聪明的方法可以解决这个问题,但是
intersect(intersect(a,b),c)
会完成这项工作。
编辑:如果你有很多论点,更聪明,更方便:
Reduce(intersect, list(a,b,c))
评论
25赞
mariotomo
8/12/2011
+1 提醒我们正确的 R 大写!Reduce
9赞
Giora Simchoni
10/13/2016
值得注意的是,这是针对集合操作的。如果元素在向量中重复出现,则会丢失此信息,因为向量在相交之前会变成集合。例如 将导致 ,您可能想要结果。intersect
intersect(c(1,1,2,3), c(1,1,3,4))
c(1,3)
c(1,1,3)
2赞
StatsSorceress
8/26/2018
@GioraSimchoni 如果这真的是你想要的,你怎么能得到 c(1,1,3) 呢?
0赞
Montgomery Clift
10/3/2019
@StatsSorceress 假设您想要由正整数组成的向量的“交集保留重复项”,所有向量都在列表 L 中。以下代码有效: 另一种方法是使用该函数和负下标,以迭代方式从每个向量中删除添加到“内核”的每个元素。N <- max(unlist(L)); LT <- lapply(L, tabulate, nbins = N); v <- do.call(pmin, LT); unlist(sapply(1:N, function(x) rep(x, v[x])))
match
28赞
James
9/13/2010
#2
这已经是一个很好的答案,但还有其他几种方法可以做到这一点:
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
评论
0赞
kcm
9/12/2020
我怎样才能在单个数据帧的不同列中找到共同的元素,该元素是数字,我尝试了reduce函数,而不是out,我尝试将它们转换为因子仍然没有答案,但是如果我尝试一个,例如intersect(df$a,df$b)等工作..由于我总共有 40 列,所以做起来很麻烦......你能建议一些更短的东西吗
10赞
Abhi
5/27/2016
#3
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)
评论
c
c(1,2...)