R语言:将一维向量索引转换为二维矩阵索引的方法
如何从原向量索引推导转换后矩阵的位置?
假设我们有一个向量:
myVector <- c(1,2,3,4,1,2,3,4,1,2,3,4)
其中原向量索引9对应的元素为1:
> myVector[9] [1] 1
将该向量转换为6行2列的矩阵:
> myMatrix <- matrix(myVector, nrow = 6, ncol = 2) # 仅需指定nrow或ncol其中一个参数即可 > myMatrix [,1] [,2] [1,] 1 3 [2,] 2 4 [3,] 3 1 [4,] 4 2 [5,] 1 3 [6,] 2 4
通用计算方法
R语言中matrix()函数默认采用按列填充的方式将向量转换为矩阵,针对这种情况,可通过以下公式计算原向量索引idx在矩阵中的对应位置:
- 列号:
ceiling(idx / nrow(matrix_obj))或(idx - 1) %/% nrow(matrix_obj) + 1 - 行号:
(idx - 1) %% nrow(matrix_obj) + 1
如果转换矩阵时指定了byrow = TRUE(按行填充),则公式调整为:
- 行号:
ceiling(idx / ncol(matrix_obj))或(idx - 1) %/% ncol(matrix_obj) + 1 - 列号:
(idx - 1) %% ncol(matrix_obj) + 1
示例验证
针对你的场景,原向量索引idx=9,矩阵行数nrow=6:
- 列号:
ceiling(9/6) = 2 - 行号:
(9-1) %% 6 + 1 = 8 %% 6 + 1 = 3
对应矩阵位置为myMatrix[3,2],验证结果:
> myMatrix[3,2] [1] 1
与原向量索引9的元素一致,计算正确。
内容的提问来源于stack exchange,提问作者Aku-Ville Lehtimäki
相关产品推荐
相关产品推荐

