2015-05-21 23 views
1

我知道這似乎微不足道,但假設我有一個vector v的:如何找到R中的向量與其它向量與位置

v <- 20:50 

和向量​​s,使得:

s <- c(30, 36, 37, 58) 

有沒有辦法比較兩個向量,以便我們得到'v'值等於's'值的位置?這將是一個泛化:

v[v==30] 

但與s的所有值。有些人喜歡:

v[v==s] 
+2

'which(v%in%s)'maybe? –

+3

或'match(s,v)' – eipi10

+0

'match()'將包含NA(或選擇'nomatch'值),但仍然是一個不錯的選擇 –

回答

3

我覺得你只是想這樣的事情得到了在sv位置。

which(v %in% s) 
# [1] 11 17 18 

如果這些值始終是唯一的,則可以創建一個顯示值匹配的已命名向量。

setNames(which(v %in% s), s[s %in% v]) 
# 30 36 37 
# 11 17 18 
+0

謝謝,這正是我需要的 –

0

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 
+0

奇怪的是,即使你使用'sapply',它也會返回一個列表,所以你需要用'unlist()'來包裝它來獲得一個位置向量。 – eipi10

+0

這很奇怪。一個錯誤,也許?文檔似乎表明它應該返回一個向量。無論如何,我編輯了我的答案。 –