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
相关产品推荐
相关产品推荐

