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

R语言中使用pivot_longer实现多组配对列宽表转长表

正确实现代码

library(tidyverse)

# 原始数据
df <- data.frame(area = c(1,2,3), 
                 cust1_LastName = c("Jack", "Sam", "Mary"), 
                 cust1_Money = c(10,40,50),
                 cust2_LastName = c("Jane", "Kevin", "John"), 
                 cust2_Money = c(5,20,30))

# 转换逻辑
df2 <- df %>%
  pivot_longer(
    cols = -area, # 保留area列不参与长宽转换
    names_to = c("cust_group", ".value"), # 第一个捕获组存客户分组标识,第二个捕获组的值作为新列名
    names_pattern = "(cust\\d+)_(.*)" # 匹配列名的「客户分组_属性」结构
  ) %>%
  # 按需求重命名列
  rename(
    customer = LastName,
    money_spend = Money
  ) %>%
  # 不需要客户分组标识可删除该列
  select(-cust_group)

错误原因说明

  1. 原代码的names_pattern正则无法匹配列名结构:你的原始列名遵循custN_属性名的规则,正则需要拆分出「客户分组标识」和「属性名」两个部分,(cust\\d+)_(.*)的第一个捕获组匹配cust+数字的分组标识,第二个捕获组匹配下划线后的属性名。
  2. names_to的顺序设置错误:.value对应的是要保留为新列名的捕获组,这里我们需要把属性名(LastName、Money)作为新列,所以.value要放在第二个位置,对应正则的第二个捕获组。

通用性说明

该写法天然支持多组配对列的场景,只要所有配对列严格遵循{分组标识}_{属性名}的命名规则,不管是10组还是更多配对列,都不需要调整转换逻辑,自动适配所有列完成转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:09:05