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

如何用dplyr将四列按分组标签转置为两列

使用pivot_longer实现分组转置

先构造一个示例数据集方便演示:

library(tibble)
library(tidyr)

df <- tibble(
  x1 = c(1, 2, 3),
  x2 = c(4, 5, 6),
  y1 = c(7, 8, 9),
  y2 = c(10, 11, 12),
  z = c("a", "b", "c")
)

直接用pivot_longer结合正则匹配就能完成分组和标签列创建,核心代码如下:

df_long <- df %>%
  pivot_longer(
    cols = -z,  # 保留z列不参与转置
    names_to = c(".value", "group"),  # .value对应x/y列的数值,group存分组后缀
    names_pattern = "(x|y)(\\d)"  # 拆分列名:前半部分是x/y,后半部分是数字1/2
  ) %>%
  mutate(group = paste0("Group ", group))  # 把数字转为指定的分组名称

运行后得到的结果:

df_long
#> # A tibble: 6 × 4
#>   z     group   x     y
#>   <chr> <chr> <dbl> <dbl>
#> 1 a     Group 1     1     7
#> 2 a     Group 2     4    10
#> 3 b     Group 1     2     8
#> 4 b     Group 2     5    11
#> 5 c     Group 1     3     9
#> 6 c     Group 2     6    12

关键参数说明

  • cols = -z:明确排除z列,只处理x1、x2、y1、y2这四列
  • names_to = c(".value", "group"):.value是特殊参数,用来指定提取列名中作为新列名的部分;group则用来存储分组标识的后缀数字
  • names_pattern = "(x|y)(\\d)":正则表达式的两个捕获组,分别匹配列名里的x/y前缀和1/2后缀,刚好对应names_to里的两个位置
  • 最后用mutate把数字后缀转换成要求的"Group 1"、"Group 2"格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:43:09