我在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])
什麼是最有效的方式做到這一點數的向量?
謝謝。
我在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])
什麼是最有效的方式做到這一點數的向量?
謝謝。
> 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
如果我理解你是正確的,你想要從對數據框的對角線上取得數值,你可以從列中取出數值嗎?或類似的東西?
IFF x[,y]
將始終是正方形,那麼這應該工作:
diag.index <- diag(nrow = length(y)) == 1
x[ ,y][diag.index]
參閱相關的問題http://stackoverflow.com/q/3209761/210673爲例具有三維矩陣。 – Aaron 2011-06-07 18:57:09