2012-07-16 120 views
0

在我的一個玩具問題中,我有一個矢量a由整數組成,我想從a有效地刪除也是矢量b的條款。我寫的代碼R:如何從矢量中刪除另一個矢量中的術語?

newa=NULL 
for (j in 1:length(a)) 
    if (min(abs(a[i]-b))>0) newa=c(newa,a[i]) 

但是這是可怕的......

+0

很多類似的相關問題,[這裏是一個(http://stackoverflow.com/questions/7494848/standard-way-to-remove-multiple-elements-from-a-dataframe/7498829# 7498829) – Chase 2012-07-16 02:25:48

回答

3

你可以只使用intersectsetdiff,等等(見?setdiff):

a <- 1:10 
b <- c(2, 3, 5, 7) 

setdiff(a, b) 
# [1] 1 4 6 8 9 10 

甚至只用%in%

a[!(a %in% b)] # (a %in% b) is TRUE in index i if a[i] is in b. 
+0

謝謝,這的確能完成這項工作 – 2012-07-16 01:57:24

2

這是輕鬆的手指喜歡mathematical.co ffee,所以我永遠不會回答問題:P

我這樣做很多使用%in%。而且我從Stephen Turner那裏獲得了一小部分代碼,使它變得更加簡單!

## Returns a logical vector TRUE for elements of X not in Y 
"%nin%" <- function(x, y) !(x %in% y)