首页 > 解决方案 > 从另一个矩阵中以特定顺序获取矩阵的标题

问题描述

我想要一个带有标题的矩阵。我生成矩阵如下

res.var <- matrix(nrow = 2, ncol = 4)
res.var <- as.data.frame(res.var)

我想以特定顺序从另一个数据框中获取列名。我从另一个数据框中获取列名的顺序。

列名是

column.names <- c("a", "b", "c", "d", "e")
column.names <- as.data.frame(column.names)

顺序/位置是

position.vec <- c(3, 4, 5, 2)
position.vec <- as.data.frame(position.vec)

我尝试按如下方式连接两个矩阵:

j <- 1
l <- 4

while (j <= l) {
  names(res.var)[j] <- column.names[position.vec[j, 1], ]
  j <- j + 1
}

有谁知道我的错误在哪里?

结果,我期望这样的表

resulting.table <- matrix(nrow = 2, ncol = 4)
resulting.table <- as.data.frame(resulting.table)
names(resulting.table) <- c("c", "d", "e", "b")

另外,有没有办法在没有循环的情况下做到这一点?

标签: rloopsmatrixheader

解决方案


我们可以通过根据提取来setnames命名res.varcolumn.namesposition.vec

setNames(res.var, column.names[position.vec$position.vec,])

#   c  d  e  b
#1 NA NA NA NA
#2 NA NA NA NA

如果我们决定保留column.namesposition.vec作为向量

res.var <- matrix(nrow = 2, ncol = 4)
res.var <- as.data.frame(res.var)
column.names <- c("a", "b", "c", "d", "e")
position.vec <- c(3, 4, 5, 2)

我们可以改为

names(res.var) <- column.names[position.vec]

如果我们想将它们保留为数据框,我们可以这样做

names(res.var) <- column.names[position.vec$position.vec,]

推荐阅读