You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:05:09