在R中整理多级分组数据:将多行格式转换为单行多列结构
用R实现多级分组数据的宽表转换
步骤1:模拟原始数据
先还原你描述的6行5列结构数据,方便后续演示:
# 创建原始数据框 df <- data.frame( class = rep("X", 6), group = rep(c("A", "B", "C"), each = 2), level = rep(c(1, 2), 3), var1 = c(1, 2, 3, 4, 5, 6), var2 = c(10, 20, 30, 40, 50, 60) )
原始数据结构示例:
class group level var1 var2 1 X A 1 1 10 2 X A 2 2 20 3 X B 1 3 30 4 X B 2 4 40 5 X C 1 5 50 6 X C 2 6 60
步骤2:用tidyr包完成宽表转换
tidyr包的pivot_wider函数是处理这类数据重组的最优工具,先安装并加载包:
install.packages("tidyr") library(tidyr)
执行转换操作,按规则拼接目标列名:
wide_df <- df %>% pivot_wider( id_cols = class, names_from = c(group, level), values_from = c(var1, var2), names_glue = "var{tolower(group)}{level}{sub('var', '', .value)}" )
转换后得到你需要的1行13列结构:
class vara11 vara21 vara12 vara22 varb11 varb21 varb12 varb22 varc11 varc21 varc12 varc22 1 X 1 10 2 20 3 30 4 40 5 50 6 60
关键参数说明
id_cols = class:指定保留的行标识列,确保最终结果只有1行names_from = c(group, level):指定用来生成新列名的分组维度values_from = c(var1, var2):指定需要展开的数值变量列names_glue:自定义列名拼接规则,将组名转小写后,按var+组名+层级+变量序号的格式生成目标列名
从TXT文件读取原始数据
如果数据存储在TXT文件中,先用read.table读取(分隔符根据实际文件调整):
df <- read.table("你的数据文件.txt", header = TRUE, sep = "\t") # 若为逗号分隔则用sep=","
读取完成后重复上述pivot_wider转换步骤即可。
内容的提问来源于stack exchange,提问作者V-cubed
相关产品推荐
相关产品推荐

