我有两个向量,称为a
和b
,但向量a
中的一些元素会重复出现。
我想计算a
和b
的交点,但在结果中,我还希望重复与a
和b
<交叉的元素/ p>
示例和预期输出在这里:
> a<-c("a","a", "c")
> b<-c("a", "c")
我使用intersect()
> intersect(a,b)
[1] "a" "c"
我期望获得:
>[1] "a" "a" "c"
有人会帮我在R?中实现这个吗?
答案 0 :(得分:2)
这将成为这项工作。 rep的第一个参数是排序的交集,第二个参数是根据a
中b
中元素的平行最大值和b
中元素的计数来计算的。 }也在a
。
rep(sort(intersect(a, b)), pmax(table(a[a %in% b]), table(b[b %in% a])))
# [1] "a" "a" "c" "c"
答案 1 :(得分:2)
是的,免费提供我作为套餐作者:使用vecsets
套餐。
现在的推理:标准intersect
,union
等函数在代数规则下运行,代数集包含可区分的元素,即没有&#34;重复。&#34 ;但是为了计算目的和像我一样的怪人,我写了一些版本,允许你假装每个实例,比如&#34; a&#34; ,是独一无二的。
答案 2 :(得分:2)
将其改为丑陋的解决方案
unlist(lapply(intersect(a, b), function(x) rep(x, max(length(a[a %in% x]), length(b[b %in% x])))))
答案 3 :(得分:2)
您的问题描述不是很清楚。也许这个:
a<-c("a","a", "c", "d")
b<-c("a", "c", "d", "d", "e")
i <- intersect(a, b)
r <- apply(rbind(table(a)[i],
table(b)[i]),
2, max)
rep(names(r), r)
#[1] "a" "a" "c" "d" "d"