【问题标题】:Why does unique command act like intersect command?为什么 unique 命令的行为类似于 intersect 命令?
【发布时间】:2017-10-05 09:51:59
【问题描述】:

我检查了问题,但找不到任何解释。

所以我有两个向量,我只想选择一个具有而另一个没有的不同元素。

我假设的向量定义如下:

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"

我在网上进行了一些挖掘,但找不到我所缺少的东西。我需要找到一个数据具有而另一个数据没有的独特元素。

【问题讨论】:

    标签: r unique intersect


    【解决方案1】:

    你想要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
    

    这就是我认为您正在寻找的东西。

    【讨论】:

    • 这就是我完全忘记的事情,因为我的原始数据和我为这个问题创建的数据都没有重复。非常感谢。
    【解决方案2】:

    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 与第一行的结果相同,因此需要对适当大小的数据集进行基准测试以显示性能差异。

    【讨论】:

    • 是的,只是提醒了!感谢您的明确解释。
    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多