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

如何在R中按MRN分组查找重复的OBSERVATION_DATE记录

R中按MRN分组标记组内重复日期

问题说明

现有代码仅全局检查OBSERVATION_DATE的重复,未按MRN分组,导致不同MRN的相同日期也会被误标记。需要修改为仅同一MRN分组内的重复日期才标记为TRUE,且不使用data.table解决方案。

示例数据:

library(anytime) # 需先加载anytime包解析日期
sample <- data.frame(MRN = c(1, 2, 1, 2, 3, 4, 3),
                     OBSERVATION_DATE = anydate(c("2013-02-19", "2013-02-28", "2013-02-19", "2013-02-28", "2013-02-28", "2013-03-08", "2014-01-06")))

方案1:基础R实现(无需额外包)

利用ave()函数按MRN分组,在每个组内判断日期是否重复:

# 按MRN分组处理,先将日期转字符避免类型问题
sample$dupobs <- with(sample, ave(as.character(OBSERVATION_DATE), MRN, 
                                  FUN = function(x) duplicated(x) | duplicated(x, fromLast = TRUE)))
# 转换为逻辑值类型
sample$dupobs <- as.logical(sample$dupobs)

方案2:dplyr包实现(tidyverse风格)

通过group_by()按MRN分组,在组内标记重复日期:

library(dplyr)

sample <- sample %>%
  group_by(MRN) %>%
  mutate(dupobs = duplicated(OBSERVATION_DATE) | duplicated(OBSERVATION_DATE, fromLast = TRUE)) %>%
  ungroup()

验证结果

运行代码后,sample的dupobs列结果如下:

MRNOBSERVATION_DATEdupobs
12013-02-19TRUE
22013-02-28TRUE
12013-02-19TRUE
22013-02-28TRUE
32013-02-28FALSE
42013-03-08FALSE
32014-01-06FALSE

完全符合需求:仅同一MRN下的重复日期被标记为TRUE,不同MRN的相同日期(如第5条的2013-02-28)未被误标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:57:08