有没有办法从矩阵中矢量化列的选择(重复)?

时间:2018-03-19 00:24:35

标签: r matrix vectorization

我有一个大小为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

在我的原始数据中,pkn相当大(分别为30K,500和2K),并且在所有Z值上循环以选择和组合来自L的列需要很长时间。可以有一个矢量化的方式(没有循环)来完成这项任务吗?

1 个答案:

答案 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不关心是否有重复的列索引。