我有一个大小为n x k
的矩阵L和一个大小为p
的向量Z. Z由表示L的列索引的整数组成。我想创建一个大小为n x p
的矩阵X,它是根据Z中的值选择的L对应列的聚合。
Z = c(1, 3, 1, 2)
L = matrix(c(73,50,4,14,87,5,34,51,17,57,47,65),nrow=4)
> L
[,1] [,2] [,3]
[1,] 73 87 17
[2,] 50 5 57
[3,] 4 34 47
[4,] 14 51 65
我希望X成为
> X
[,1] [,2] [,3] [,4]
[1,] 73 17 73 87
[2,] 50 57 50 5
[3,] 4 47 4 34
[4,] 14 65 14 51
在我的原始数据中,p
,k
和n
相当大(分别为30K,500和2K),并且在所有Z值上循环以选择和组合来自L的列需要很长时间。可以有一个矢量化的方式(没有循环)来完成这项任务吗?
答案 0 :(得分:0)
很确定这只是:
L[,Z]
# [,1] [,2] [,3] [,4]
#[1,] 73 17 73 87
#[2,] 50 57 50 5
#[3,] 4 47 4 34
#[4,] 14 65 14 51
当您从大多数对象中进行选择时,R不关心是否有重复的列索引。