2010-08-23 37 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]