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

fae0ux8s  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(227)

我遇到了以下问题。我的数据集每行都有一个不同的病人,我有变量“医院”和“外科医生”,它们告诉我这些病人是在哪家医院由哪家外科医生做手术的。
每个外科医生只在一家医院工作。有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中:

  1. df <- data.frame(patient = 1:15,
  2. hospital = rep(LETTERS[1:3], each = 5),
  3. surgeon = c(rep(1:5, 2), c(2,2,4,5,5)))
  4. df$surgeon_code <- as.factor(paste0(df$hospital, df$surgeon))
  5. df$surgeon_num <- as.numeric(df$surgeon_code)

字符串
dplyr::mutate

  1. library(dplyr)
  2. df %>%
  3. mutate(surgeon_code = as.factor(paste0(hospital, surgeon)),
  4. surgeon_num = as.numeric(hospital_code))


两个输出:

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

展开查看全部

相关问题