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

R语言dplyr实现数据框宽转长并添加周序号变量的方法

R/dplyr 宽转长并添加周编号实现方案

基于你已生成的AI_mean长表追加周编号

你当前得到的长表已经按患者分组,每个ID下固定按x1到x7的顺序排列7条记录,直接分组生成行号即可匹配周序号,代码如下:

library(dplyr)

AI_mean_updated <- AI_mean %>%
  group_by(PATIENT) %>%
  # 需要1-7的序号直接取行号,需要你最开始提到的0-6序号就改成 row_number() - 1
  mutate(WEEK = row_number()) %>%
  ungroup()

这个方法逻辑简单,不需要修改你之前的转换代码,只要最后加一步分组计算行号就行,因为pivot_longer默认会保留原列的排列顺序,不会出现周数错位的问题。


一次性完成全指标宽转长+周编号生成(推荐)

你之前只单独提取了AI_mean相关列做转换,实际上可以一次性处理AI_mean/MAD_mean/SD_mean/ENMO_t_mean四类指标,同时直接从原列名提取周数,避免多次转表的麻烦,准确率更高:

library(dplyr)
library(tidyr)
library(readr)

# 原始宽表替换为你自己的表名即可
long_all <- raw_df %>%
  # 保留患者ID,选中所有带mean后缀的指标列
  select(PATIENT, ends_with("mean")) %>%
  pivot_longer(
    cols = -PATIENT,
    # 按列名里的.拆分,前半段是x+周数,后半段是指标名
    names_to = c("week_tag", "metric_name"),
    names_sep = "\\.",
    values_to = "metric_value",
    values_drop_na = TRUE # 和你之前代码的空值处理逻辑保持一致
  ) %>%
  mutate(
    # 从x1/x2...字段里提取数字作为周编号
    WEEK = parse_number(week_tag),
    # 要0-6的周序号就改成 WEEK = parse_number(week_tag) - 1
    week_tag = NULL # 删除临时拆分的周数字段
  ) %>%
  # 把不同指标展开为独立列,得到最终规整表
  pivot_wider(
    names_from = metric_name,
    values_from = metric_value
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:03:20