我想要一个带有标题的矩阵。我生成矩阵如下
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")
还有,有没有办法做到这一点而没有循环?
答案 0 :(得分:1)
通过根据setnames
提取res.var
,我们可以使用column.names
为position.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.names
和position.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]