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

在R中基于Subject ID实现football_total列的累计填充需求

在R中基于Subject ID实现football_total列的累计填充需求

嗨,这个需求我熟!咱们可以用R里的dplyr包(语法更清晰)或者base R来轻松搞定,核心思路就是按受试者分组,先处理基线行的计算逻辑,再匹配对应基线值完成随访行的累计填充。下面一步步来实现:

第一步:构造示例数据

先把你描述的示例数据还原出来,方便后续测试:

library(dplyr)

df <- tibble(
  subjectid = c(1, 1, 2, 2, 3),
  event = c("baseline", "followup", "baseline", "followup", "baseline"),
  football_year_baseline = c(3, NA, 0, NA, 2),
  football_total = c(6, NA, 0, NA, 4)
)

第二步:分组计算填充

用dplyr的分组和mutate函数来实现需求逻辑:

df_processed <- df %>%
  # 按subjectid分组,确保每个受试者的基线和随访行在一起处理
  group_by(subjectid) %>%
  # 处理基线行:如果基线行的football_total为空,用football_year_baseline * 2填充
  mutate(football_total = ifelse(event == "baseline" & is.na(football_total), 
                                 football_year_baseline * 2, 
                                 football_total)) %>%
  # 处理随访行:取同一组的基线football_total值加2,填充到随访行
  mutate(football_total = ifelse(event == "followup" & is.na(football_total),
                                 first(football_total[event == "baseline"]) + 2,
                                 football_total)) %>%
  # 取消分组,回到普通数据框格式
  ungroup()

结果展示

运行上面的代码后,处理好的数据框df_processed会是这样的:

subjectideventfootball_year_baselinefootball_total
1baseline36
1followupNA8
2baseline00
2followupNA2
3baseline24

完全符合你的要求:受试者1的随访行是6+2=8,受试者2的随访行是0+2=2,没有随访行的受试者3则保持原有数据不变。

备选:base R实现方案

如果你不想用dplyr包,也可以用base R的ave函数来实现相同逻辑:

# 先处理基线行
df$football_total <- ifelse(df$event == "baseline" & is.na(df$football_total),
                            df$football_year_baseline * 2,
                            df$football_total)

# 再处理随访行
df$football_total <- ifelse(df$event == "followup" & is.na(df$football_total),
                            ave(df$football_total, df$subjectid, 
                                FUN = function(x) x[df$event == "baseline" & df$subjectid == unique(df$subjectid)] + 2),
                            df$football_total)

备注:内容来源于stack exchange,提问作者user123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:24:49