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

按PTNUM分组修正AGE_1列值:R语言dplyr实现求助

使用dplyr修正随访数据中AGE_1的连续性错误

原始数据集

PTNUMAGE_1AGE_2STATE_1STATE_2
123151812
123152322
123232823
124151711
124172511
12425NA11
125172012

问题说明

同一PTNUM的随访数据中,每行的AGE_1应与上一行的AGE_2保持连续。其中PTNUM=123的第二行AGE_1错误填写为15,正确值应为上一行的AGE_2(18)。

修正后目标数据集

PTNUMAGE_1AGE_2STATE_1STATE_2
123151812
123182322
123232823
124151711
124172511
12425NA11
125172012

你的尝试代码(未生效)

X6 <- X5 %>%
  group_by(PTNUM) %>%
  mutate(
    AGE1 = ifelse(lead(AGE2)==AGE1,AGE2, AGE1)
  )

代码问题分析

  1. 变量名不匹配:原数据列名为AGE_1,代码中误用AGE1,导致无法正确关联变量。
  2. 逻辑方向错误:lead(AGE2)获取的是下一行的AGE_2,但我们需要的是上一行的AGE_2来修正当前行的AGE_1,应使用lag()函数。
  3. 条件逻辑偏差:判断条件不符合实际需求,我们需要的是当前行AGE_1与上一行AGE_2不一致时,用后者替换前者。

正确解决方案

使用dplyr的lag()函数获取上一行的AGE_2,每组第一行保留原始AGE_1,其余行替换为上一行的AGE_2:

library(dplyr)

X6 <- X5 %>%
  group_by(PTNUM) %>%
  mutate(
    AGE_1 = if_else(row_number() == 1, AGE_1, lag(AGE_2))
  ) %>%
  ungroup()

代码解释

  • group_by(PTNUM):按患者分组,确保仅在同一患者的随访记录内处理年龄连续性。
  • row_number() == 1:每组第一行为初始记录,保留原始AGE_1值。
  • lag(AGE_2):获取当前行上一行的AGE_2,替换当前行AGE_1,保证年龄连续。
  • ungroup():处理完成后取消分组,避免影响后续操作。

运行代码后,PTNUM=123的第二行AGE_1会被修正为18,其余符合连续性的记录保持不变,与目标数据集一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:15:33