我已经检查了问题,但我找不到任何解释。
所以我有两个向量,我只想选择一个拥有的不同元素而另一个没有。
我假设向矢量定义为:
hypo1=c("a01","a02","a03","a04","b01","b02","b03","b04","c01","c02","c03","c04")
hypo2=c("a03","a04","b01","b02","c02","c03")
然后想要看到这两个载体中的重复项。
intersect(hypo1,hypo2)
[1] "a03" "a04" "b01" "b02" "c02" "c03"
似乎工作正常。
然而,当我想看到hypo1
所拥有且hypo2
没有的唯一元素时,我在第一个向量中恢复了所有元素。如:
unique(hypo1,hypo2)
[1] "a01" "a02" "a03" "a04" "b01" "b02" "b03" "b04" "c01" "c02" "c03" "c04"
然后我改变了我创建的向量的顺序,它给出了交叉命令结果,比如
unique(hypo2,hypo1)
[1] "a03" "a04" "b01" "b02" "c02" "c03"
我在网上做了一些挖掘,但我找不到我错过的东西。我需要找到一个数据所具有的唯一元素而其他数据没有。
答案 0 :(得分:3)
你想要setdiff(hypo2, hypo1)
。 unique(hypo2, hypo1)
表示完全不同的内容:它表示您需要hypo2
中的唯一条目,但如果hypo1
中列出了值,则允许值重复。有关详情,请参阅帮助页面?unique
。
例如,
unique(c(1,2,2,3,3,4,4,4), c(3,4))
给出
[1] 1 2 3 3 4 4 4
因为3和4被宣布为“不相容”。另一方面,
setdiff(c(1,2,2,3,3,4,4,4), c(3,4))
给出
[1] 1 2
这是我认为你在寻找的。 p>
答案 1 :(得分:3)
Unique只允许一个向量作为参数x
。第二个向量将用作参数incomparables
。从?unique
我们了解到这些值
永远不会被标记为重复。这旨在用于一组相当小的值,并且对于非常大的集合而言效率不高。
提取重叠/不同值的一种方法是:
hypo1[!hypo1 %in% hypo2]
# [1] "a01" "a02" "b03" "b04" "c01" "c04"
hypo1[hypo1 %in% hypo2]
# [1] "a03" "a04" "b01" "b02" "c02" "c03"
由于setdiff
与第一行具有相同的结果,因此对于适当大小的数据集来说,基准是必要的,以显示性能差异。