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

如何高效处理数据框案例与变量:长表转宽表需求

高效实现重复案例合并与列展开(R语言)

我正在学习数据整理(data wrangling),当前处理一个包含6422条观测、20个变量的数据框(data frame)。遇到的问题是:存在多列(如示例中的x1、x2、x3、x4)案例重复的情况,希望将重复案例合并为一行,同时将对应的value1、value2列按stats.title字段展开为新列,目标是将df1转换为df7格式。

我已尝试手动拆分合并的方法,但因数据量较大,现寻求高效的实现方式。

示例数据生成代码

library(dplyr)
library(tidyr)

x1 <- rep(c("A","E"), each=3)
x2 <- rep(c("B","F"), each=3)
x3 <- rep(c("C","G"), each=3)
x4 <- rep(c("D","H"), each=3)
stats.title <- rep(c("I","J","K"), times=2)
value1 <- (1:6)
value2 <- (7:12)

df1 <- data.frame(x1,x2,x3,x4,stats.title,value1,value2)

df1的结构如下:

x1 x2 x3 x4 stats.title value1 value2
1  A  B  C  D           I      1      7
2  A  B  C  D           J      2      8
3  A  B  C  D           K      3      9
4  E  F  G  H           I      4     10
5  E  F  G  H           J      5     11
6  E  F  G  H           K      6     12

高效转换方案

无需手动拆分合并,直接使用tidyr的pivot_wider函数,通过指定分组列、列名来源和数值列,一步完成转换:

df7 <- df1 %>%
  pivot_wider(
    id_cols = c(x1, x2, x3, x4),  # 按这些列分组,合并重复案例
    names_from = stats.title,     # 以该字段值作为新列名的后缀
    values_from = c(value1, value2)  # 需要展开为新列的数值字段
  )

转换后的df7结构:

x1    x2    x3    x4    value1_I value1_J value1_K value2_I value2_J value2_K
  <chr> <chr> <chr> <chr>    <int>    <int>    <int>    <int>    <int>    <int>
1 A     B     C     D            1        2        3        7        8        9
2 E     F     G     H            4        5        6       10       11       12

方案说明

  • id_cols参数指定用于分组的列(即重复的案例标识列),函数会自动将这些列值相同的行合并为一行
  • names_from指定用于生成新列名后缀的字段
  • values_from指定需要按names_from字段展开的数值列,函数会自动将每个分组内的对应值填充到新列中

这种方法避免了手动拆分、合并数据框的繁琐操作,处理大数量级数据时效率更高,代码可读性也更强。

内容的提问来源于stack exchange,提问作者rhay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:10:36