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

在R中同时对多个变量进行数据透视操作

R数据框宽转长(按列名前缀拆分)

可以用tidyverse中的tidyr::pivot_longer函数高效解决这个问题,完美适配你这种列名遵循[指标]_[时间状态]模式的宽格式数据:

# 先加载tidyverse包
library(tidyverse)

# 给原数据添加观测编号
df <- df %>% 
  mutate(obs.number = row_number())

# 执行宽转长操作
pivot_result <- df %>%
  pivot_longer(
    cols = -obs.number,  # 排除观测编号列,处理其余所有列
    names_to = c(".value", "status"),  # 拆分列名:前缀作为新列名,后缀存入status列
    names_sep = "_"  # 按下划线拆分列名
  ) %>%
  select(obs.number, residence, family, status)  # 调整列顺序与目标格式一致

代码说明

  • mutate(obs.number = row_number()):为每一行生成唯一的观测编号,对应目标数据中的obs.number列。
  • pivot_longer是核心函数:
    • names_to = c(".value", "status"):.value是特殊关键字,代表将拆分后的前缀部分作为新的列名(比如residence、family),后缀部分(pre/during/after)则存入status列。
    • names_sep = "_":指定列名的拆分分隔符为下划线。
  • select用于调整列的顺序,确保和你期望的输出结构完全匹配。

如果你的真实数据有更多遵循相同命名模式的列,这个代码无需修改就能直接适用,pivot_longer会自动处理所有符合规则的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:12:36