在我的一個玩具問題中,我有一個矢量a
由整數組成,我想從a
有效地刪除也是矢量b
的條款。我寫的代碼R:如何從矢量中刪除另一個矢量中的術語?
newa=NULL
for (j in 1:length(a))
if (min(abs(a[i]-b))>0) newa=c(newa,a[i])
但是這是可怕的......
在我的一個玩具問題中,我有一個矢量a
由整數組成,我想從a
有效地刪除也是矢量b
的條款。我寫的代碼R:如何從矢量中刪除另一個矢量中的術語?
newa=NULL
for (j in 1:length(a))
if (min(abs(a[i]-b))>0) newa=c(newa,a[i])
但是這是可怕的......
你可以只使用intersect
,setdiff
,等等(見?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.
謝謝,這的確能完成這項工作 – 2012-07-16 01:57:24
這是輕鬆的手指喜歡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)
很多類似的相關問題,[這裏是一個(http://stackoverflow.com/questions/7494848/standard-way-to-remove-multiple-elements-from-a-dataframe/7498829# 7498829) – Chase 2012-07-16 02:25:48