基于matchid将病例的index_date复制至对照行
问题:将匹配病例的index_date复制给对应对照
需求说明:
- 数据集中
case=1代表病例,case=0代表对照 - 同一
matchid对应一对病例-对照,需将病例的index_date复制给同组对照的index_date(对照的该字段为NA)
样本输入数据
Study_ID time index_date case matchid <chr> <dbl> <dbl> <dbl> <dbl> 1 101 0 2 1 1 2 101 1 2 1 1 3 101 2 2 1 1 4 101 3 2 1 1 5 340 0 NA 0 1 6 340 1 NA 0 1 7 340 2 NA 0 1 8 340 3 NA 0 1
目标输出数据
Study_ID time index_date case matchid <chr> <dbl> <dbl> <dbl> <dbl> 1 101 0 2 1 1 2 101 1 2 1 1 3 101 2 2 1 1 4 101 3 2 1 1 5 340 0 2 0 1 6 340 1 2 0 1 7 340 2 2 0 1 8 340 3 2 0 1
解决方案(R语言)
使用dplyr包按matchid分组,提取每组病例的index_date并赋值给整组:
# 加载dplyr包 library(dplyr) # 假设数据框名为df df <- df %>% group_by(matchid) %>% # 取每组中case=1的index_date(因每组仅一个病例,取第一个即可) mutate(index_date = index_date[case == 1][1]) %>% ungroup()
补充说明
- 若每组病例的
index_date存在多个值(理论上不应出现),可改用unique(index_date[case == 1])确保取值唯一 - 若之前报错,检查是否已加载
dplyr包,或确认matchid、case、index_date的数据类型是否正确(比如matchid应为数值/字符型,index_date无混合类型)
内容的提问来源于stack exchange,提问作者kmc23
相关产品推荐
相关产品推荐

