我在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])
最有效的方法是什么?
感谢。
答案 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]