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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:50:06