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

R语言如何按患者诊断的出现次数对诊断观测值重命名

实现思路

你需要按患者ID、诊断名称两个维度分组,统计每个诊断在对应患者下的出现次序:第一次出现保留原诊断名,第二次及以后将次序拼在诊断名后,空值保持不变即可。


方案1:使用tidyverse(dplyr)实现

代码逻辑直观易读,适合习惯tidyverse语法的场景:

library(dplyr)

mydata <- mydata %>%
  # 按患者ID、诊断名称分组
  group_by(ID, diag) %>%
  mutate(
    # 统计当前诊断在该患者下的第几次出现
    cnt = row_number(),
    # 生成新诊断名
    diag2 = case_when(
      is.na(diag) ~ NA_character_,
      cnt == 1 ~ diag,
      TRUE ~ paste0(diag, cnt)
    )
  ) %>%
  ungroup() %>%
  # 删除中间计数变量
  select(-cnt)

方案2:基础R实现

无需加载额外依赖包,直接使用内置函数实现:

# 分组生成每个诊断的出现次序
mydata$cnt <- ave(mydata$diag, mydata$ID, mydata$diag, FUN = seq_along)
# 生成新诊断列
mydata$diag2 <- ifelse(is.na(mydata$diag), NA, 
                       ifelse(mydata$cnt == 1, mydata$diag, paste0(mydata$diag, mydata$cnt)))
# 删除中间计数列
mydata$cnt <- NULL

两种方案运行后得到的diag2都和你给出的示例效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:12:03