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

如何用dplyr优雅实现数据框按指定列将行拆分为多行?

用dplyr+tidyr优雅实现宽表转长表

嘿,你要的其实是典型的宽数据转长数据操作,用tidyverse生态里的dplyr结合tidyr的pivot_longer()函数就能完美搞定,这绝对是你要找的优雅解决方案~

第一步:先模拟你的原始数据

首先我们先还原你的输入数据框:

library(dplyr)
library(tidyr)

# 模拟原始宽格式数据
df <- tibble(
  x = c(0, 1),
  Total = c(13, 19),
  PartA = c(6, 8),
  PartB = c(7, 11)
)

第二步:核心转换代码

只用几行管道操作就能完成转换,完全符合dplyr的风格:

df_long <- df %>%
  pivot_longer(
    cols = -x,          # 保留x列,将其余所有列转为行
    names_to = "Colname", # 原列名存入新列Colname
    values_to = "Val"    # 原列的数值存入新列Val
  )

参数解释

  • cols = -x:表示除了x列之外,其他所有列都需要被“拉长”成行;如果你想指定特定列(比如只转Total、PartA),也可以写成cols = c(Total, PartA, PartB)
  • names_to:定义原来的列名要放到哪个新列里,这里就是你要的Colname
  • values_to:定义原来列中的数值要放到哪个新列里,对应你要的Val

最终结果

运行后得到的数据结构完全符合你的需求:

df_long
#> # A tibble: 6 × 3
#>       x Colname   Val
#>   <dbl> <chr>   <dbl>
#> 1     0 Total      13
#> 2     0 PartA       6
#> 3     0 PartB       7
#> 4     1 Total      19
#> 5     1 PartA       8
#> 6     1 PartB      11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:48:35