我在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