我知道這似乎微不足道,但假設我有一個vector v的:如何找到R中的向量與其它向量與位置
v <- 20:50
和向量s,使得:
s <- c(30, 36, 37, 58)
有沒有辦法比較兩個向量,以便我們得到'v'值等於's'值的位置?這將是一個泛化:
v[v==30]
但與s的所有值。有些人喜歡:
v[v==s]
我知道這似乎微不足道,但假設我有一個vector v的:如何找到R中的向量與其它向量與位置
v <- 20:50
和向量s,使得:
s <- c(30, 36, 37, 58)
有沒有辦法比較兩個向量,以便我們得到'v'值等於's'值的位置?這將是一個泛化:
v[v==30]
但與s的所有值。有些人喜歡:
v[v==s]
我覺得你只是想這樣的事情得到了在s
的v
位置。
which(v %in% s)
# [1] 11 17 18
如果這些值始終是唯一的,則可以創建一個顯示值匹配的已命名向量。
setNames(which(v %in% s), s[s %in% v])
# 30 36 37
# 11 17 18
謝謝,這正是我需要的 –
unlist(sapply(s, function(x) v[v==x]))
結果:
> v <- 20:50
> s <- c(30, 36, 37, 58)
> unlist(sapply(s, function(x) v[v==x]))
[1] 30 36 37
奇怪的是,即使你使用'sapply',它也會返回一個列表,所以你需要用'unlist()'來包裝它來獲得一個位置向量。 – eipi10
這很奇怪。一個錯誤,也許?文檔似乎表明它應該返回一個向量。無論如何,我編輯了我的答案。 –
'which(v%in%s)'maybe? –
或'match(s,v)' – eipi10
'match()'將包含NA(或選擇'nomatch'值),但仍然是一個不錯的選擇 –