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

在R语言中将宽格式数据转换为长格式的技术求助

宽格式转指定长格式的解决方案

你可以用tidyr包的pivot_longer()函数来实现需求,这个函数能精准匹配成对的宽格式列(var_ma_*和diff_*),并生成对应的visit列。

步骤1:准备依赖包

如果未安装tidyr,先执行安装:

install.packages("tidyr")

加载包:

library(tidyr)

步骤2:执行数据重塑

运行以下代码:

df_long <- df1 %>%
  pivot_longer(
    cols = starts_with(c("var_ma_", "diff_")), # 选中需要转长的成对列
    names_to = c(".value", "visit"), # 拆分列名:前缀作为新值列名,数字作为visit编号
    names_pattern = "(var_ma|diff)_(\\d+)", # 正则匹配列名的前缀和数字部分
    values_drop_na = TRUE
  ) %>%
  select(id_male, id_female, visit, var_ma, diff, var) # 调整列顺序至目标格式

代码说明

  • cols = starts_with(...):筛选所有以var_ma_或diff_开头的列,即需要转长的目标列。
  • names_to = c(".value", "visit"):.value表示将列名的前缀(var_ma/diff)作为新列的名称,visit表示将列名中的数字作为该列的取值。
  • names_pattern = "(var_ma|diff)_(\\d+)":用正则表达式拆分列名,第一组匹配前缀,第二组匹配数字编号。
  • select(...):调整列的顺序,和你需要的输出格式完全对齐。

输出示例

运行后得到的结果与目标格式一致,比如原数据中id_male=1的行会被拆分为4行:

id_male id_female visit var_ma diff var
1       1       522     1    839  904   1
2       1       522     2    996  888   1
3       1       522     3    866  333   1
4       1       522     4    661  701   1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:45:14