我正在寻找一种简单的方法来矢量化一个采用向量的顺序值的操作,并将其用作给定列的索引。例如:
dataf <- replicate(10, sample(0:100,10,rep=TRUE))
> dataf
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 11 70 31 46 55 7 87 12 93 16
[2,] 62 55 30 26 65 31 4 90 47 90
[3,] 61 28 16 30 31 72 32 1 14 13
[4,] 62 93 4 51 62 50 1 79 54 13
[5,] 86 29 22 18 33 15 24 9 19 10
[6,] 64 84 81 76 50 50 71 52 90 51
[7,] 0 28 53 20 68 49 31 38 39 30
[8,] 23 26 92 26 48 75 51 7 31 2
[9,] 67 18 83 100 24 17 5 32 16 31
[10,] 51 23 4 81 77 85 57 67 90 74
ind <- c(1:10)
使用'ind'作为每行的列索引,我想要做的是执行类似于此的操作:
dataf[1, ind[1]]
dataf[2, ind[2]]
...
dataf[10, ind[10]]
我正在寻找一个单一载体的结果:
> result
[1] 11 55 16 51 33 50 31 7 16 74
我希望避免使用循环 - 有什么方法可以使用矢量化方法实现这一目标吗?
谢谢你, AG
答案 0 :(得分:1)
你想要
dataf[cbind(1:10, ind)]
当然,如果你真的想要对角线,你可以做到
diag(dataf)
但我假设您的ind
值并非始终是连续的。