【问题标题】:Build block matrix from existing matrixes and retain dimnames in r从现有矩阵构建块矩阵并在 r 中保留 dimnames
【发布时间】:2018-03-07 00:46:56
【问题描述】:

我正在构建一个块矩阵,其中包含几个较小的矩阵,我使用包 Matrix 沿着对角线过去

假设我有两个矩阵

m1=matrix(runif(10*10),nrow=10,ncol=10)
m2=matrix(runif(5*5),nrow=5,ncol=5)

我用

创建了一个块矩阵
M<-bdiag(m1,m2)

如何将较小的 m1 和 m2 的列名和行名保留到块矩阵 M 中?

请注意,我需要 M 在数据框中,因此我还需要在最后运行

M<-as.data.frame(as.matrix(M))

谢谢!

【问题讨论】:

  • 在您的示例中,m1 和 m2 都没有名称。

标签: r matrix block names


【解决方案1】:

在运行bdiag 后重新添加dimnames(假设您的意思是Matrix::bdiag):

m1 <- matrix(1:9,nrow=3,dimnames=list(LETTERS[1:3],LETTERS[1:3]))
m2 <- matrix(1:4,nrow=2,dimnames=list(LETTERS[4:5],LETTERS[4:5]))
m1

#  A B C
#A 1 4 7
#B 2 5 8
#C 3 6 9

m2
#  D E
#D 1 3
#E 2 4

out <- bdiag(m1,m2)
dimnames(out) <- Map(c, dimnames(m1), dimnames(m2))
out

#5 x 5 sparse Matrix of class "dgCMatrix"
#  A B C D E
#A 1 4 7 . .
#B 2 5 8 . .
#C 3 6 9 . .
#D . . . 1 3
#E . . . 2 4

【讨论】:

  • 谢谢,这很好用(感谢在代码中添加名称)。但是,在我的数据集中,我无法在最后使用命令 M
  • @Francesca - 您可以通过 data.frame(as.matrix(out),check.names=FALSE) 拥有重复的列名,但不能将重复的行名作为有效的 data.frame。您最好将其保留为矩阵而不是 data.frame。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2016-03-15
相关资源
最近更新 更多