从另一个矩阵中按一定顺序获取矩阵头

时间:2018-09-25 13:53:52

标签: r loops matrix header

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

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")

还有,有没有办法做到这一点而没有循环?

2 个答案:

答案 0 :(得分:1)

通过根据setnames提取res.var,我们可以使用column.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,]

答案 1 :(得分:1)

我建议使用以下代码摆脱循环并从“ a-e”范围中获取值作为列名。令人高兴的是,您可以将“顺序向量”(position.vec)作为索引传递给包含标题名称的列。

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)

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

如果您还希望/也需要来自data.frame的位置,那么您需要更改代码中的最后两行:

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

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