R语言如何将输出矩阵的行索引替换为原矩阵对应行名称
问题场景
给定R语言中的矩阵m(行名为A-H),经计算得到存储行索引的结果矩阵ind,代码如下:
k=10; n = 8 m <- matrix(c(1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0), n, k, byrow = TRUE) colnames(m)<-1:k; rownames(m)<-LETTERS[1:n] # 计算得到的索引矩阵 ind <-matrix(c( 1, 1, 2, 2, 3, 6, 4, 7, 5, 8), 5, 2, byrow = TRUE)
需求是将ind中的数值行索引替换为m对应的行名,同时保留原矩阵5行2列的结构。
直接运行noquote(rownames(m)[ind])会得到扁平化的一维向量输出,不符合预期,预期输出格式如下:
[,1] [,2] [1,] A A [2,] B B [3,] C F [4,] D G [5,] E H
解决方案
直接用ind作为索引取行名时,R默认会将结果降维为一维向量,只要将取到的字符向量按ind的原始行列数重构为矩阵即可,代码如下:
# 取对应行名后按ind的维度重建矩阵 res <- matrix(rownames(m)[ind], nrow = nrow(ind), ncol = ncol(ind)) # 输出无引号格式的结果 noquote(res)
运行后即可得到完全匹配预期的输出:
[,1] [,2] [1,] A A [2,] B B [3,] C F [4,] D G [5,] E H
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

