2014-07-15 66 views
1

這可能是一個微不足道的問題。矢量元素映射指數

鑑於人物,其中有些是重複的向量:

vec <- c("a","b","d","e","e","f","g","a","d") 

我正在尋找一個高效功能將在vec每一個獨特的元素返回的結果將出現在vec指數。

我想象的返回值將是這樣的名單:

list(a = c(1,8), b = 2, d = c(3,9), e = c(4,5), f = 6, g = 7) 

回答

1

這裏有幾個選項:

lapply(setNames(unique(vec),unique(vec)), function(x) which(x == vec)) 
# or to avoid setNames and still ensure you get a list: 
sapply(unique(vec), function(x) which(x == vec), simplify=FALSE) 
# or even better but maybe not as extensible: 
split(seq_along(vec),vec) 

全部給:

$a 
[1] 1 8 

$b 
[1] 2 

$d 
[1] 3 9 

$e 
[1] 4 5 

$f 
[1] 6 

$g 
[1] 7