如何在R语言中为数据框添加重复列名作为首列?
在R语言中创建带循环行名的数据框datanew
需求说明
基于已有的data数据框,创建新数据框datanew,保留原数据的所有列值,同时将行名设置为原数据框的列名A、B、C、D循环重复3次(匹配原数据12行的长度)。
方法一:基础R实现
直接复制原数据,生成循环的行名向量并赋值给新数据框的行名:
# 生成原数据框(已提供的代码) set.seed(123) data <- as.data.frame(matrix(rnorm(12 * 4, mean = 0, sd = 1), 12, 4)) colnames(data) <- c("A", "B", "C", "D") # 创建datanew并设置循环行名 datanew <- data # 重复列名3次,生成12个元素的行名向量 rownames(datanew) <- rep(colnames(data), times = 3)
执行后查看datanew即可得到目标效果:
> datanew A B C D A -0.56047565 0.4007715 -0.6250393 0.55391765 B -0.23017749 0.1106827 -1.6866933 -0.06191171 C 1.55870831 -0.5558411 0.8377870 -0.30596266 D 0.07050839 1.7869131 0.1533731 -0.38047100 A 0.12928774 0.4978505 -1.1381369 -0.69470698 B 1.71506499 -1.9666172 1.2538149 -0.20791728 C 0.46091621 0.7013559 0.4264642 -1.26539635 D -1.26506123 -0.4727914 -0.2950715 2.16895597 A -0.68685285 -1.0678237 0.8951257 1.20796200 B -0.44566197 -0.2179749 0.8781335 -1.12310858 C 1.22408180 -1.0260044 0.8215811 -0.40288484 D 0.35981383 -0.7288912 0.6886403 -0.46665535
方法二:tidyverse风格实现
使用dplyr包的函数完成行名设置,适合习惯tidyverse工作流的用户:
library(dplyr) # 生成原数据框 set.seed(123) data <- as.data.frame(matrix(rnorm(12 * 4, mean = 0, sd = 1), 12, 4)) colnames(data) <- c("A", "B", "C", "D") # 创建datanew datanew <- data %>% # 添加临时列存储循环的列名 mutate(row_names = rep(colnames(data), times = 3)) %>% # 将临时列转为行名 column_to_rownames(var = "row_names")
内容的提问来源于stack exchange,提问作者nickolakis
相关产品推荐
相关产品推荐

