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

R语言如何遍历数据框观测值 按随访月生成年度记录并计算年龄

按年间隔展开随访记录并计算对应时间点年龄

现有R数据框存储受试者随访信息,包含3个字段:受试者ID(USUBJID)、总随访月数(follow_up)、基线年龄(AGE),原始数据构造代码如下:

df1<-structure(list(USUBJID = c(1, 2, 3), 
                    follow_up = c(24,36,56), 
                    AGE = c(65,34,65)), 
               row.names = c(NA, -3L), 
               class = c("tbl_df", "tbl", "data.frame"))

原始数据预览:

# A tibble: 3 x 3
  USUBJID follow_up   AGE
    <dbl>     <dbl> <dbl>
1       1        24    65
2       2        36    34
3       3        56    65

处理规则

  • 为每位受试者生成从0月开始、间隔12个月的随访节点,节点最大值为不超过总随访月数的最大12的整数倍:例如总随访36个月时生成0、12、24、36四个节点,总随访56个月时最大节点为48。
  • 每个节点的年龄以基线年龄为基础,每满12个月年龄加1。

处理后期望得到如下结果:

# A tibble: 12 x 3
   USUBJID Month   AGE
     <dbl> <dbl> <dbl>
 1       1     0    65
 2       1    12    66
 3       1    24    67
 4       2     0    34
 5       2    12    35
 6       2    24    36
 7       2    36    37
 8       3     0    65
 9       3    12    66
10       3    24    67
11       3    36    68
12       3    48    69

实现方法

用dplyr+tidyr的行分组+列表展开逻辑可以快速实现,代码如下:

library(dplyr)
library(tidyr)

result <- df1 %>% 
  rowwise(USUBJID) %>% 
  mutate(
    # 生成12个月间隔的月份序列
    Month = list(seq(0, floor(follow_up / 12) * 12, by = 12)),
    # 按年份累加计算对应年龄
    AGE = list(AGE + (Month / 12))
  ) %>% 
  unnest(c(Month, AGE)) %>% 
  select(USUBJID, Month, AGE)

逻辑说明

  • floor(follow_up / 12) * 12用来计算每个受试者符合要求的最大随访节点,自动过滤掉不满12个月的零散随访时长。
  • 按行分组后为每个受试者单独生成月份序列、计算对应年龄,存储为列表列后统一展开成长表格式,输出和期望结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:48:25