Конвертируя коды icd9 в R, сохраняйте только лучший результат, когда есть кратные

Я пытаюсь преобразовать коды icd9 в коды icd10. Некоторые преобразования имеют несколько результатов. Я просто хочу сохранить лучший результат и поместить его в новый столбец.

У меня есть датафрейм с именем test

> test
   icd9
1  4260
2 41401
3 42821
4  8602
5  1869
6 41071

И функция convICD из пакета icdcoder.

> test$icd10=convICD(test$icd9, "icd9")
Error in `$<-.data.frame`(`*tmp*`, icd10, value = list(icd9 = c("1869",  : 
  replacement has 7 rows, data has 6

Выдает ошибку, так как некоторые преобразования имеют более одного результата. Например, код 1869 преобразует два разных значения.

> convICD(1869, "icd9")
  icd9 icd10
1 1869 C6210
2 1869 C6290

Я просто хочу создать новый столбец в тесте, тест $icd10, который имеет первый результат из каждой версии. Так, например, когда он преобразует 1869, он просто преобразует его в C6210. Я уверен, что есть действительно простое решение для этого, но я не могу думать об этом.

1 ответ

library(icdcoder)
library(data.table)

test <- data.frame(icd9 = c(4260, 41401, 42821, 8602, 1869, 41071))

Хотя он использует data.table внутренне, функция предназначена для возврата data.frame:

str(convICD(test$icd9, "icd9"))
## 'data.frame':    7 obs. of  2 variables:
##  $ icd9 : chr  "1869" "1869" "41071" "41401" ...
##  $ icd10: chr  "C6210" "C6290" "I214" "I2510" ...
## 'data.frame':    7 obs. of  2 variables:
##  $ icd9 : chr  "1869" "1869" "41071" "41401" ...
##  $ icd10: chr  "C6210" "C6290" "I214" "I2510" ...

Это также ударяет оригинальный заказ:

convICD(test$icd9, "icd9")
##    icd9   icd10
## 1  1869   C6210
## 2  1869   C6290
## 3 41071    I214
## 4 41401   I2510
## 5  4260    I442
## 6 42821   I5021
## 7  8602 S271XXA

Если вы можете жить с изменением заказа, то - так как вы застряли loading data.table в любом случае - просто используйте его идиому для этого:

res <- data.table(convICD(test$icd9, "icd9"))
data.frame(res[, .SD[1], by="icd9"])
##    icd9   icd10
## 1  1869   C6210
## 2 41071    I214
## 3 41401   I2510
## 4  4260    I442
## 5 42821   I5021
## 6  8602 S271XXA
Другие вопросы по тегам