【发布时间】:2018-08-27 11:54:59
【问题描述】:
我有一个大小为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 的列需要非常很久。是否有矢量化方式(无循环)来完成这项任务?
【问题讨论】:
-
很确定这只是
L[,Z]- 当您从大多数对象中进行选择时,R 并不关心您是否有重复的列索引。 -
您提到了聚合,但您的输出与@thelatemail 所建议的一样。还有一步吗?
-
@thelatemail 哇,太好了,谢谢!!我没有尝试常规索引,因为出于某种原因,我确信它不适用于重复索引。有时候,即使你没有任何希望,尝试一下也是有意义的,看起来……
标签: r matrix vectorization