根据变量存在的更高级别创建唯一变量

问题描述 投票:0回答:1

我遇到以下问题。 我的数据集每行都有一个不同的患者,并且我有变量“医院”和“外科医生”,它们告诉我这些患者在哪家医院以及由哪位外科医生进行手术。

每位外科医生只在一家医院工作。有 20 家医院,每家医院有 3 到 10 名外科医生。 (总共约100名外科医生) 问题是在我的数据中所有外科医生都编号为 1 到 10。因此,A 医院有一名外科医生 1,B 医院有一名外科医生 1。但是,他们是不同的外科医生。

我想创建一个名为“surgeon_unique”的新变量,它对于每个独特的外科医生(基于医院*外科医生)都有一个唯一的整数(从0到100)。

有人可以告诉我该怎么做吗?我在网上找不到答案。非常感谢!

我希望有别的东西,而不是 case_when,因为我认为这意味着我必须编写 100 行代码(对于医院 + 外科医生的每个组合,都需要编写一行新代码)

r multi-level
1个回答
1
投票

在基础 R 中,您可以使用

paste0
作为
as.factor
来制作一个独特的外科医生列,它是一个因子 - 在 R 中,因子的后面有“隐藏”的数字。如果你想让它们被赋予一个数字,你可以把它包裹在
as.numeric
:

df <- data.frame(patient = 1:15,
                 hosptial = 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$hosptial, df$surgeon))
df$surgeon_num <- as.numeric(df$surgeon_code)

输出:

#    patient hosptial 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
© www.soinside.com 2019 - 2024. All rights reserved.