【问题标题】:Bag difference (similar to setdiff() but not for sets)袋差(类似于 setdiff() 但不适用于集合)
【发布时间】:2011-03-04 19:22:10
【问题描述】:

在 R 中,是否有一些简单的方法来处理多集(即“袋子”)差异,类似于 setdiff(),但在输入向量中保留顺序和多重性?

例如,假设x <- c(1,2,2,3,1,5,4,4,5,3)y <- c(2,1,5,5)。我正在寻找一个函数bagdiff() 使得bagdiff(x,y)c(2,3,1,4,4,3),即x 中第一次出现的y 元素已被删除,具有多重性。

(在我的实际任务中,我不会真正关心输出的顺序,所以只有多重性是否正确才重要,但一般的有序情况似乎值得解决。)

【问题讨论】:

    标签: r set subtraction


    【解决方案1】:

    有一个sets 模块与您所描述的很接近。比如:

    library(sets)
    gset_difference(as.gset(x), as.gset(y)) 
    # gives
    {1 [1], 2 [1], 3 [2], 4 [2]}
    

    【讨论】:

    • 谢谢 - 有没有办法将 gset 结果转回常规向量?或者我应该使用rep(unlist(gs), times=gset_memberships(gs)) 之类的东西吗?
    • 我找不到任何其他方法。像这样的功能似乎是对该包的一个很好的补充。请注意,成员资格并不总是整数。
    猜你喜欢
    • 2021-06-18
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2018-07-26
    相关资源
    最近更新 更多