R语言 根据变量所在的更高级别创建唯一变量

fae0ux8s  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(68)

我遇到了以下问题。我的数据集每行都有一个不同的病人,我有变量“医院”和“外科医生”,它们告诉我这些病人是在哪家医院由哪家外科医生做手术的。
每个外科医生只在一家医院工作。有20家医院,每家医院都有3到10名外科医生。(总共约100名外科医生)问题是,在我的数据中,所有外科医生都被编号为1到10。因此,A医院有1名外科医生,B医院有1名外科医生。然而,这些是不同的外科医生。
我想创建一个名为“surgeon_unique”的新变量,它为每个唯一的外科医生(基于医院 * 外科医生)提供唯一的整数(从0到100)。
有人能告诉我怎么做吗?我在网上找不到答案。非常感谢!
我希望有比case_when更好的东西,因为我认为这意味着我必须编写100行代码(对于医院+外科医生的每个组合,一行新代码)

vlf7wbxs

vlf7wbxs1#

在基R中,你可以使用paste0作为as.factor来创建一个唯一的外科医生列,它是一个因子-在R中,因子后面“隐藏”着数字。如果你想让它们被赋予一个数字,你可以把它 Package 在as.numeric中:

df <- data.frame(patient = 1:15,
                 hospital = rep(LETTERS[1:3], each = 5),
                 surgeon = c(rep(1:5, 2), c(2,2,4,5,5)))

df$surgeon_code <- as.factor(paste0(df$hospital, df$surgeon))
df$surgeon_num <- as.numeric(df$surgeon_code)

字符串
dplyr::mutate

library(dplyr)

df %>% 
  mutate(surgeon_code = as.factor(paste0(hospital, surgeon)),
         surgeon_num = as.numeric(hospital_code))


两个输出:

#    patient hospital surgeon surgeon_code surgeon_num
# 1        1        A       1           A1           1
# 2        2        A       2           A2           2
# 3        3        A       3           A3           3
# 4        4        A       4           A4           4
# 5        5        A       5           A5           5
# 6        6        B       1           B1           6
# 7        7        B       2           B2           7
# 8        8        B       3           B3           8
# 9        9        B       4           B4           9
# 10      10        B       5           B5          10
# 11      11        C       2           C2          11
# 12      12        C       2           C2          11
# 13      13        C       4           C4          12
# 14      14        C       5           C5          13
# 15      15        C       5           C5          13

相关问题