2013-04-30 151 views
0

我想這是一個非常簡單的問題。r,這些數字存在於一個向量中,但不在另一箇中

v1 = 1:10 
v2 = c(2,4,7) 

(沒有數字重複,無需使用唯一的())

我想包含所有在V1不在V2值的向量。

solution = c(1,3,5,6,8,9,10) 

我可以使用for循環來做到這一點,但我相信有更簡單的解決方案。

謝謝

回答

7
setdiff(v1, v2) 
# [1] 1 3 5 6 8 9 10 
2

使用%in%運營商與邏輯NOT(!)由值不在v2子集v1

v1[ ! v1 %in% v2 ] 
#[1] 1 3 5 6 8 9 10 

或者你可以尋找在V2 V1的非匹配(此是幾乎相同):

v1[ is.na(match(v1 , v2)) ] 
#[1] 1 3 5 6 8 9 10 

或者USI ng which以獲得指數:

v1[ which(! v1 %in% v2) ] 
#[1] 1 3 5 6 8 9 10 

所有味道都是一樣的。還有更多的方法可以做到這一點。絕對不要爲此使用循環,因爲這種操作是一個完美的例子,你可以對R的矢量化進行優化。循環最好被稱爲副作用和/或當迭代次數的處理比較大時。

相關問題