2011-03-04 78 views
4

在R中,是否存在一些简单的方法来执行多组(即“bag”)差异,类似于setdiff(),但保留了输入向量中的顺序和多重性?袋子差异(类似于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的元素的第一次出现已被删除,具有多重性。

(在我的实际任务,我不会很在意的输出顺序,所以唯一要紧的是多重性是正确的,但一般下令情况下的确显得值得解决。)

回答

3

有一个sets模块接近你所描述的。像这样的:

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

谢谢 - 是否有一种方法可以将'gset'结果转换回正则向量?还是应该使用'rep(unlist(gs),times = gset_memberships(gs))'这样的东西? – 2011-03-04 21:40:21

+0

我找不到任何其他方式来做到这一点。像这样的函数似乎是该包中的一个很好的补充。请注意,成员并不总是一个整数。 – SiggyF 2011-03-05 10:42:51

相关问题