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

如何用tidyr将R语言患者数据转换为指定结构的纵向数据集

生成纵向数据集的解决方案

首先可以优化你原有的患者基础数据生成代码——不需要用rowwise(),rbinom()可以直接向量化处理,效率更高:

library(dplyr)
library(tidyr) # 需要用到tidyr的扩展函数

set.seed(420)
Pat_TNO <- 1001:1618

# 生成基础患者数据
patient_data <- data.frame(Pat_TNO = Pat_TNO) %>%
  mutate(trt = rbinom(n(), 1, 0.5))

接下来定义时间点:

timepoint_weeks <- c(seq(2, 12, 2), 16, 20, 24, 52)
timepoint_days <- 7 * timepoint_weeks

现在有两种简单的方法生成每位患者对应10个时间点的纵向数据集:

方法1:使用crossing()函数

crossing()会自动将患者数据和时间点进行笛卡尔积匹配,生成所有组合:

longitudinal_data <- patient_data %>%
  crossing(timepoint_days = timepoint_days)

方法2:使用nest() + unnest()组合

先将时间点嵌套到每个患者行,再展开:

longitudinal_data <- patient_data %>%
  mutate(timepoint_days = list(timepoint_days)) %>%
  unnest(timepoint_days)

两种方法最终都会生成包含Pat_TNO、trt、timepoint_days三列的数据集,每位患者对应10行数据,每行对应一个时间点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:41:41