gpt4 book ai didi

R:跨多个向量的非共享元素(与相交相反)

转载 作者:行者123 更新时间:2023-12-04 13:22:47 26 4
gpt4 key购买 nike

我想提取多个向量之间的所有共享元素和非共享元素。

假设我有这些向量:

set.seed(9)
a <- sample(LETTERS,10,replace=F)
b <- sample(LETTERS,10,replace=F)
c <- sample(LETTERS,10,replace=F)

我首先用维恩图探索它们的重叠:

venn.diagram(list('a'=a,'b'=b,'c'=c), filename="test.png", height=1000, width=1000, imagetype="png", units="px")

test

我知道如何通过这种方式获取所有向量(中心 3)共享的元素:

shared <- Reduce(intersect, list(a,b,c))
length(shared)#3, correct

但是,如何获取跨组(5+7+5=17)未共享的元素?

我的尝试如下:

outersect <- function(a,b) unique(c(setdiff(a,b), setdiff(b,a)))
unshared <- Reduce(outersect, list(a,b,c))
length(unshared)#20, I expect 17 (5+7+5)

但是这个数字是不正确的,因为比较是在成对的基础上进行的……有什么办法可以轻松做到这一点吗?

最佳答案

我的方法是先将所有这些向量组合起来。然后用表函数统计频率,最后计算长度

temp = c(a,b,c)
temp_table = table(temp)
length(temp_table[temp_table == 1])

如果要显示唯一元素,请使用名称

names(temp_table[temp_table == 1])

关于R:跨多个向量的非共享元素(与相交相反),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47526537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com