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

如何用tidyr::pivot_longer一次性完成多列宽转长数据整理

解决方案

你可以借助pivot_longer的names_pattern参数配合正则匹配,一次性完成宽表转长表的操作,无需拆分多个子表再合并,示例代码如下:

library(tidyverse)

# 替换下面的「raw_data」为你的实际数据框名称
final_long <- raw_data %>%
  # 筛选需要处理的列,自动过滤will_ef、dexfood等不需要的列
  select(ID, matches("^will_f\\d+$|^dface\\d+$|^dfood\\d+$|^dout\\d+$")) %>%
  pivot_longer(
    cols = -ID,
    # .value表示第一组正则匹配结果作为新列名,第二组作为trial列取值
    names_to = c(".value", "trial"),
    # 正则分两组:第一组抓变量前缀,第二组抓末尾的试验编号
    names_pattern = "(will_f|dface|dfood|dout)(\\d+)",
    # 转换前缀为你需要的变量名,同时把trial转为整数格式
    names_transform = list(
      .value = ~case_when(
        .x == "will_f" ~ "will",
        .x == "dface" ~ "face",
        .x == "dfood" ~ "food",
        .x == "dout" ~ "out"
      ),
      trial = as.integer
    )
  )

核心逻辑说明

  • 用matches()配合正则筛选目标列,避免手动指定列范围出错
  • names_to中的.value是pivot_longer的特殊关键字,会把对应正则分组匹配到的内容转为新的变量列,自动按ID和trial对齐取值
  • names_transform一步完成前缀重命名和trial的类型转换,无需额外处理
    运行后你将直接得到包含ID、trial、will、face、food、out六列的长表,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:06:02