2011-03-04 79 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

相關問題