在R中转换icd9代码,当有多个时保持最佳结果

时间:2017-10-04 21:01:30

标签: r icd

我正在尝试将icd9代码转换为icd10代码。某些转化有多种结果。我只想保留最高结果并将其放入新专栏。

我有一个名为test

的数据框
> test
   icd9
1  4260
2 41401
3 42821
4  8602
5  1869
6 41071

来自包icdcoder的函数convICD。

> 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

我只想在test中创建一个新列,测试$ icd10,它具有每个版本的第一个结果。因此,例如当它转换为1869时,它只会将其转换为C6210。我确信这有一个非常简单的解决方案,但我无法想到它。

1 个答案:

答案 0 :(得分: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

如果您可以接受订单更改,那么 - 因为您仍然无法加载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