2

我正在尝试将 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。我确信有一个非常简单的解决方案,但我想不出。

4

1 回答 1

1
library(icdcoder)
library(data.table)

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

即使它在data.table内部使用,该函数也旨在返回 a 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
于 2017-10-04T21:30:24.483 回答