如何基于医院-医生组合生成唯一surgeon_unique标识变量?
生成医院-医生组合的唯一整数标识
以下是几种无需手动编写大量case_when代码的实现方案,均能自动为每个hospital*surgeon的唯一组合分配0起始的唯一整数:
方法1:dplyr(tidyverse)实现
利用分组索引函数自动识别唯一组合:
library(dplyr) # 方案A:使用group_indices df <- df %>% mutate(surgeon_unique = group_indices(., hospital, surgeon) - 1) # 方案B:通过因子转换 df <- df %>% mutate(surgeon_unique = as.integer(factor(paste(hospital, surgeon, sep = "_"))) - 1)
group_indices会按hospital和surgeon的组合生成从1开始的组号,减1后得到0起始的标识- 因子转换方案先将两个变量拼接为唯一字符串,再转成整数索引,同样通过减1实现0起始
方法2:Base R实现
无需加载额外包,用interaction函数生成交互因子:
df$surgeon_unique <- as.integer(interaction(df$hospital, df$surgeon, drop = TRUE)) - 1
drop = TRUE会忽略未在数据中出现的医院-医生组合,避免生成无效索引- 转换为整数后减1,得到0起始的唯一标识
方法3:data.table实现(适合大数据集)
如果处理的是大规模数据集,data.table的分组操作效率更高:
library(data.table) setDT(df) df[, surgeon_unique := .GRP - 1, by = .(hospital, surgeon)]
.GRP会为每个by指定的分组分配唯一组号,减1后得到0起始的标识
注意事项
- 所有方案生成的
surgeon_unique范围为0到(唯一组合数-1),符合你0-100的需求(因总组合约100个) - 若需要固定的索引顺序,可在因子转换时添加
ordered = TRUE,或在group_indices中指定sort = TRUE
内容的提问来源于stack exchange,提问作者Floris B.
相关产品推荐
相关产品推荐

