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

如何在R语言中按患者与日期生成就诊次数序列字段

在R语言中为每位患者生成就诊次数字段

核心需求是按患者姓名分组,根据就诊日期的先后顺序,为每位患者生成递增的就诊次数编号。以下是两种实现方案:

方法一:使用dplyr包(简洁直观)

需要先加载dplyr和lubridate包(后者用于日期格式转换):

library(dplyr)
library(lubridate)

假设你的原始数据如下:

df <- data.frame(paitent=c('Sally', 'Josh', 'Josh', 'Abram','Sally', 'Josh'),
                 visit=mdy(c('2/10/2022', '2/11/2022', '2/12/2022', '2/13/2022', '2/14/2022', '2/15/2022')))

执行以下代码生成visit_count字段:

df <- df %>%
  group_by(paitent) %>%          # 按患者姓名分组
  arrange(visit, .by_group = TRUE) %>% # 分组内按就诊日期排序(确保顺序正确)
  mutate(visit_count = row_number()) %>% # 生成组内递增序号
  ungroup()                      # 取消分组,恢复普通数据框结构

说明:

  • group_by(paitent):将数据按患者姓名拆分独立分组
  • arrange(visit, .by_group = TRUE):确保每组内的记录按就诊日期从小到大排序,即使原始数据顺序混乱也能正确计数
  • row_number():在每个分组内生成从1开始的连续整数,正好对应每位患者的就诊次数

方法二:使用Base R(无需额外安装包)

如果不想加载第三方包,可以用Base R的原生函数实现:

  1. 先按患者姓名和就诊日期排序数据:
df_sorted <- df[order(df$paitent, df$visit), ]
  1. 用ave()函数生成分组内的递增序号:
df_sorted$visit_count <- ave(rep(1, nrow(df_sorted)), df_sorted$paitent, FUN = seq_along)
  1. 如果需要恢复原始数据的顺序,可通过合并找回:
df <- merge(df, df_sorted[, c("paitent", "visit", "visit_count")], by = c("paitent", "visit"))

说明:

  • order(df$paitent, df$visit):生成按患者、日期排序的索引
  • ave(..., FUN = seq_along):对每个患者分组,生成从1开始的连续序号

内容的提问来源于stack exchange,提问作者Gary-c

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:10:44