如何向量化选取矩阵中可重复的列?R语言示例
解决方法:用R的矩阵索引快速生成目标矩阵X
这个需求在R里其实非常好实现,用矩阵的索引特性就能直接搞定,我给你一步步演示:
首先先重现你给出的示例数据:
# 定义索引向量Z Z <- c(1, 3, 1, 2) # 定义原始矩阵L L <- matrix(c(73,50,4,14,87,5,34,51,17,57,47,65), nrow=4)
要生成维度为n×p的矩阵X,只需要用Z作为矩阵L的列索引来选取列就可以了:
X <- L[, Z]
运行后查看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
原理说明
- R中的矩阵支持用整数向量作为索引,
L[, Z]表示选取L的所有行(,前面空着代表选全部行),然后按照Z里的顺序选取对应的列。 - 如果Z里有重复的索引(比如示例里的1出现了两次),就会重复选取L的对应列,完美实现你要的聚合效果。
- 注意:Z里的元素必须是有效的列索引(范围是1到L的列数k),否则会出现索引越界的错误。
内容的提问来源于stack exchange,提问作者user5054
相关产品推荐
相关产品推荐

