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

如何用一次tidyr::pivot_longer()调用实现多列宽表转长表?

用一次tidyr::pivot_longer()就能搞定转换

完全不需要多次调用再合并,直接借助pivot_longer()的多列匹配和.value参数一步到位。

示例代码

先构造模拟的宽格式数据:

library(tidyr)
library(dplyr)

# 模拟宽格式数据
wide_df <- tibble(
  ID = c(1, 2),
  Genre_1 = c("Action", "Comedy"),
  Genre_2 = c("Drama", "Romance"),
  SQ1_1 = c(5, 4),
  SQ1_2 = c(3, 5),
  SQ2_1 = c(4, 3),
  SQ2_2 = c(5, 4)
)

然后执行一次转换:

long_df <- wide_df %>%
  pivot_longer(
    cols = -ID,  # 除ID外,其余列均参与转换
    names_to = c(".value", "time"),  # .value对应列名前缀(Genre、SQ1、SQ2),time存储后缀数字
    names_pattern = "(.*)_(\\d+)"  # 用正则拆分列名:捕获前缀部分和数字后缀
  )

转换效果说明

得到的长格式数据会自动生成以下列:

  • ID:保留原ID列内容
  • time:对应原列名中的后缀数字1/2
  • Genre:整合Genre_1、Genre_2的对应值
  • SQ1:整合SQ1_1、SQ1_2的评分数据
  • SQ2:整合SQ2_1、SQ2_2的评分数据

核心逻辑是通过正则表达式拆分列名,再利用.value参数将相同前缀的列自动合并为新列,一次操作即可完成宽格式到目标长格式的转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:18:33