我想這是一個非常簡單的問題。r,這些數字存在於一個向量中,但不在另一箇中
v1 = 1:10
v2 = c(2,4,7)
(沒有數字重複,無需使用唯一的())
我想包含所有在V1不在V2值的向量。
solution = c(1,3,5,6,8,9,10)
我可以使用for循環來做到這一點,但我相信有更簡單的解決方案。
謝謝
我想這是一個非常簡單的問題。r,這些數字存在於一個向量中,但不在另一箇中
v1 = 1:10
v2 = c(2,4,7)
(沒有數字重複,無需使用唯一的())
我想包含所有在V1不在V2值的向量。
solution = c(1,3,5,6,8,9,10)
我可以使用for循環來做到這一點,但我相信有更簡單的解決方案。
謝謝
setdiff(v1, v2)
# [1] 1 3 5 6 8 9 10
使用%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的矢量化進行優化。循環最好被稱爲副作用和/或當迭代次數的處理比較大時。