首页 > 解决方案 > 如何根据字典更改或替换行名

问题描述

我想根据提供的ICD-10代码字典,将ICD-10代码连续更改为疾病名称。

这是初始数据

id <- c("1","2","3")
Dx1 <- c("E119", "I251","I20")
Dx2 <- c("I20", "I251","E119")
Dx3 <- c("I251", "E119","I20")
df <- data.frame(id,Dx1,Dx2,Dx3)
df

这是 ICD-10 代码字典,在这个例子中有 3 个代码,但实际上,ICD-10 代码包含 94000 个代码。

ICD <- c("I251", "E119","I20")
Disease <- c("Acute Myocard Infarct", "Type 2 Diabetes", "Chest Pain")
CodeDictionary <- data.frame(ICD,Disease)
CodeDictionary

这是我的目标

id <- c("1","2","3")
Dx1 <- c("Type 2 Diabetes", "Acute Myocard Infarct","Chest Pain")
Dx2 <- c("Chest Pain", "Acute Myocard Infarct","Type 2 Diabetes")
Dx3 <- c("Acute Myocard Infarct", "Type 2 Diabetes","I20")
dfGoal <- data.frame(id,Dx1,Dx2,Dx3)
dfGoal

我尝试了 dplyr 的内部连接,但它没有用。谢谢您的帮助!

标签: r

解决方案


我认为inner_join是正确的方向。在此之前,虽然你会想要使用pivot_longer,然后一旦你有了疾病名称,你就可以使用它pivot_wider来获取你的 dfGoal:

library(tidyverse)

id <- c("1","2","3")
Dx1 <- c("E119", "I251","I20")
Dx2 <- c("I20", "I251","E119")
Dx3 <- c("I251", "E119","I20")
df <- data.frame(id,Dx1,Dx2,Dx3)
df


ICD <- c("I251", "E119","I20")
Disease <- c("Acute Myocard Infarct", "Type 2 Diabetes", "Chest Pain")
CodeDictionary <- data.frame(ICD,Disease)
CodeDictionary

id <- c("1","2","3")
Dx1 <- c("Type 2 Diabetes", "Acute Myocard Infarct","Chest Pain")
Dx2 <- c("Chest Pain", "Acute Myocard Infarct","Type 2 Diabetes")
Dx3 <- c("Acute Myocard Infarct", "Type 2 Diabetes","I20")
dfGoal <- data.frame(id,Dx1,Dx2,Dx3)
dfGoal

df_goal <- df %>%
  pivot_longer(-id, names_to = "diagnoses", values_to = "ICD") %>%
  inner_join(CodeDictionary, by = "ICD") %>%
  select(id, diagnoses, Disease) %>%
  pivot_wider(names_from = diagnoses, values_from = Disease)

希望这可以帮助!


推荐阅读