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

R语言数据框格式转换:合并重复列并拆分唯一值列

解决R语言数据框分组转宽格式问题

你需要把重复分组的多行数据合并为单行,同时将唯一值列v_3扩展为多列,但你误用了separate函数,还存在未定义对象的问题,导致报错。以下是正确的实现方案:

正确代码

library(dplyr)
library(tidyr)

# 创建示例数据框
df_1 <- data.frame(
    v_1 = c('x', 'x','x', 'y', 'y'),
    v_2 = c('s','s','s','t','t'),
    v_3 = c('a','b','c','d','e')
)

# 分组生成列序号,转宽格式
df_2 <- df_1 %>%
    group_by(v_1, v_2) %>%
    mutate(col_num = paste0("v_3_", row_number())) %>%
    pivot_wider(names_from = col_num, values_from = v_3) %>%
    ungroup()

# 查看结果
df_2

输出结果

# A tibble: 2 × 5
  v_1   v_2   v_3_1 v_3_2 v_3_3
  <chr> <chr> <chr> <chr> <chr>
1 x     s     a     b     c    
2 y     t     d     e     NA   

步骤说明

  1. 分组:用group_by(v_1, v_2)按重复的观测列分组,确保同一组的后续操作只针对该组内的数据。
  2. 生成列名:通过mutate给每个分组内的v_3生成带序号的列名(如v_3_1、v_3_2),这是转宽格式的关键。
  3. 转宽格式:pivot_wider会把分组后的多行数据转为单行,用生成的列名作为新列,v_3的值填充到对应位置,不足的位置自动补NA。
  4. 取消分组:ungroup()将分组数据恢复为普通数据框结构,避免后续操作受分组影响。

原代码报错原因

  • separate函数是用来拆分单个单元格内的字符串(比如把"a,b,c"拆成三列),完全不适合你这种多行转多列的需求。
  • 代码中unique(df$v_3)里的df未定义,应该是df_1$v_3,但即便修正这个,separate也无法实现你的目标。

内容的提问来源于stack exchange,提问作者J.A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:10:33