2010-08-23 41 views
1

我在R中爲dim(x)=(m,n)和長度爲m的數字組成的向量y有一個data.frame x並且值在1和n之間。換句話說,y對於x中的每一行都有一個條目,每個值都是x中的有效列號。我想使用y中的列號從x中提取一個「鋸齒」的數字列。例如,如果使用列號向量從R數據幀/矩陣中提取「鋸齒狀」列

y <- c(2,4,1,6,5) 

話,我想獲得等於

c(x[1,2],x[2,4],x[3,1],x[4,6],x[5,5]) 

什麼是最有效的方式做到這一點數的向量?

謝謝。

+0

參閱相關的問題http://stackoverflow.com/q/3209761/210673爲例具有三維矩陣。 – Aaron 2011-06-07 18:57:09

回答

4
> x <- matrix(rnorm(5 * 6), nrow = 5) 
> x 
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6] 
[1,] -0.8781820 0.4874737 0.5161918 0.5905719 0.1346253 -0.8108332 
[2,] 1.2811044 0.2700776 -0.5694690 -1.2984173 -0.3491372 0.2315443 
[3,] 1.1113906 -1.2589781 1.0206620 0.3396931 -0.7466635 -0.4369746 
[4,] 0.2494311 -0.9985038 -0.7322118 0.3400631 1.0992965 -1.2063930 
[5,] 0.5162947 -0.1346913 0.6835899 2.1042772 -1.5342266 -1.0558785 
> y <- c(2,4,1,6,5) 
> x[cbind(seq(y), y)] 
[1] 0.4874737 -1.2984173 1.1113906 -1.2063930 -1.5342266 
+0

很棒...簡單,做這份工作! =) – aL3xa 2010-08-24 00:14:20

+0

謝謝喬納森。這是我正在尋找的。 – Abiel 2010-08-24 00:31:08

0

如果我理解你是正確的,你想要從對數據框的對角線上取得數值,你可以從列中取出數值嗎?或類似的東西?

IFF x[,y]將始終是正方形,那麼這應該工作:

diag.index <- diag(nrow = length(y)) == 1 
x[ ,y][diag.index]