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

基于含序号的列名在R中将数据框转换为长格式

宽格式数据转长格式(多组变量带序号)

针对你的需求,不需要写循环,用tidyr包的pivot_longer函数可以高效完成宽转长操作,自动识别带序号的变量组:

步骤1:加载依赖包

library(tidyr)

步骤2:执行宽转长转换

df_tomake <- df_asis %>%
  pivot_longer(
    cols = -ID,  # 排除ID列,处理其余所有列
    names_to = c(".value", "observation"),  # .value保留原变量名作为列,observation存储分组序号
    names_sep = "\\."  # 按点号分割列名(点是正则特殊字符,需转义)
  ) %>%
  select(-observation)  # 不需要序号列则删除

这段代码会自动把Age/Age.1/Age.2合并为一列Age,Gender系列和Code系列同理,最终每个ID对应多行观测,和你给出的目标数据框完全一致。该方法无需手动指定组数(哪怕是51组也能自动处理),只要列名符合变量名.序号格式即可正常工作。


Base R替代方案(无需tidyverse)

如果不能加载外部包,可以用base R的reshape函数:

# 计算变量组数:总变量数(除ID)除以每组变量个数(此处为3)
group_count <- (ncol(df_asis) - 1) / 3

df_tomake_base <- reshape(
  df_asis,
  direction = "long",
  varying = names(df_asis)[-1],
  v.names = c("Age", "Gender", "Code"),
  idvar = "ID",
  timevar = "observation",
  times = 0:(group_count - 1)
) %>%
  select(-observation) %>%
  arrange(ID)

这个方法需要手动指定变量名(v.names)和计算组数,适合无法加载外部包的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:10:43