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
步骤说明
- 分组:用
group_by(v_1, v_2)按重复的观测列分组,确保同一组的后续操作只针对该组内的数据。 - 生成列名:通过
mutate给每个分组内的v_3生成带序号的列名(如v_3_1、v_3_2),这是转宽格式的关键。 - 转宽格式:
pivot_wider会把分组后的多行数据转为单行,用生成的列名作为新列,v_3的值填充到对应位置,不足的位置自动补NA。 - 取消分组:
ungroup()将分组数据恢复为普通数据框结构,避免后续操作受分组影响。
原代码报错原因
separate函数是用来拆分单个单元格内的字符串(比如把"a,b,c"拆成三列),完全不适合你这种多行转多列的需求。- 代码中
unique(df$v_3)里的df未定义,应该是df_1$v_3,但即便修正这个,separate也无法实现你的目标。
内容的提问来源于stack exchange,提问作者J.A.
相关产品推荐
相关产品推荐

