2016-05-12 65 views
2

我有一個矩陣:R:在每個列中選擇一個不同的行高效率地

x = rbind(1:5, 6:10) 
x 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 2 3 4 5 
[2,] 6 7 8 9 10 

我想選擇不同的行爲基於索引每個列。比如我可能想通過在相應的欄目中選擇行c(1,1,2,1,2)得到一個新的載體,看起來像

[1] 1 2 8 4 10 

。我因此可以做到這一點:

diag(x[c(1,1,2,1,2),]) 
[1] 1 2 8 4 10 

但就是內存低效的,因爲它創建這個矩陣:

x[c(1,1,2,1,2),] 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 2 3 4 5 
[2,] 1 2 3 4 5 
[3,] 6 7 8 9 10 
[4,] 1 2 3 4 5 
[5,] 6 7 8 9 10 

給出一個真正的數據集,並多次重複我關心的一個嚴重的性能問題。我如何根據我的索引有效提取相同的值

回答

6

我們可以使用row/column索引

x[cbind(c(1,1,2,1,2), 1:ncol(x))] 
#[1] 1 2 8 4 10 
+1

有趣。從來不知道這是可能的。 – zyurnaidi