2013-06-18 88 views
3

我在含有ř重複元件含有各元素的索引向量中的返回列表

a<-c("A","A","A","B","B","C","A") 

我想知道的最有效的方式在列表中變換它的向量,其中每個元素是在原來的矢量鍵,並且其位置爲值:

l<-list(A=c(1,2,3,7),B=c(4,5),C=c(6)) 
l 
$A 
[1] 1 2 3 7 
$B 
[1] 4 5 
$C 
[1] 6 

回答

4
split(seq_along(a), a) 
# $A 
# [1] 1 2 3 7 
# 
# $B 
# [1] 4 5 
# 
# $C 
# [1] 6 
+0

驚人高效! –

0

一種可能的解決方案:

mywhich<-function(x){ 
    out<-which(a==x) 
    return(out) 
} 
l <- sapply(unique(a), mywhich) 
+1

嗯。爲什麼不'mywhich < - 函數(x)哪一個(a == x)'在一個表達式中執行相同?對於這個問題,'mywhich'特定於'a',所以在這裏使用一個命名函數是沒有意義的 - 只需使用'sapply(unique(a),function(x)which(x == a))''。 –

+0

你不會把我拖入這場宗教鬥爭中(我每天都在哥倫比亞):有些人寧願不要因爲他們自己的原因使用匿名函數:-) –

+0

在函數式語言中?請原諒我的法語,但這聽起來很愚蠢。 –