使用列号向量从R data.frame / matrix中提取“锯齿状”列

时间:2010-08-23 21:45:19

标签: r

我在R中有一个data.frame x,其中dim(x)=(m,n),矢量y的长度为m,数值在1和n之间。换句话说,y在x中的每一行都有一个条目,每个值都是x中的有效列号。我想使用y中的列号从x中提取“锯齿状”数字列。例如,如果

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

然后我想得到一个等于

的数字向量
c(x[1,2],x[2,4],x[3,1],x[4,6],x[5,5])

最有效的方法是什么?

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果我理解你是对的,你想要从数据框的对角线中获取的数据是否会加剧列数?或类似的东西?

Iff x[,y]将永远是正方形,然后这应该有效:

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