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

R语言按患者ID分组生成指定行切换0/1的二进制指标实现方法

R语言实现患者确诊状态标记需求

实现逻辑

对每个ID分组后,给组内的观测行按顺序生成行号,当行号大于等于TimeToDx的值时标记为1,否则标记为0,完全匹配「前TimeToDx-1行填充0,剩余行填充1」的要求。

方案1:tidyverse(dplyr)实现(推荐,可读性高)

先加载依赖包,再分组处理:

# 未安装dplyr先执行 install.packages("dplyr")
library(dplyr)

df <- df %>%
  group_by(ID) %>% # 按患者ID分组
  mutate(Status = as.integer(row_number() >= TimeToDx)) %>% # 按组内行号判断生成状态
  ungroup() # 解除分组避免后续操作受分组影响

方案2:基础R实现(无需额外安装依赖)

用内置的ave函数实现分组计算:

# 按ID分组生成组内行号,直接判断生成Status字段
df$Status <- as.integer(ave(df$ID, df$ID, FUN = seq_along) >= df$TimeToDx)

效果验证

你可以用以下代码构造示例数据测试,运行上述处理逻辑后得到的结果和你给出的预期输出完全一致:

# 构造示例原始数据
df <- read.table(text = "ID TimeToDx Status
10425   2   NA
10425   2   NA
10425   2   NA
10425   2   NA
10667   3   NA
10667   3   NA
10667   3   NA
10667   3   NA
10667   3   NA
10686   2   NA
10686   2   NA
10686   2   NA
10686   2   NA
10686   2   NA
17096   5   NA
17096   5   NA
17096   5   NA
17096   5   NA
17096   5   NA", header = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:39:03