在R中转换icd9代码,当有倍数时只保留最上面的结果

Posted

技术标签:

【中文标题】在R中转换icd9代码,当有倍数时只保留最上面的结果【英文标题】:Converting icd9 codes in R, keep just the top result when there are multiples 【发布时间】:2017-10-04 21:01:29 【问题描述】:

我正在尝试将 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 中创建一个新列 test$icd10,其中包含每个版本的第一个结果。因此,例如,当它转换 1869 时,它只会将其转换为 C6210。我确信有一个非常简单的解决方案,但我想不出来。

【问题讨论】:

convICD() 的返回值为data.frame。您正在尝试将其存储在列中。这不会像你想象的那样奏效 【参考方案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

【讨论】:

谢谢!但看起来它正在使用第二次转换。它将 1869 转换为 C6290 而不是 C6210。 哦,我看错了。我以为你想要最后一个。一秒。 嗨 - 这里是 R 包 'icd' 的作者。 'icdcoder' 似乎是基于我们早期的工作,但现在已经不复存在。其实我以前没听说过。 'icd' 已经活跃了大约五年,并且也在 CRAN 上发布。但是,它不能直接将 ICD-9 转换为 ICD-10。如果您将 ICD-9 或 ICD-10 代码后处理为合并症,“icd”可能对您有所帮助。

以上是关于在R中转换icd9代码,当有倍数时只保留最上面的结果的主要内容,如果未能解决你的问题,请参考以下文章

查找(ICD9 代码)并将括号替换为 |

从 ICD9 码预测 RxNorm 码的卷积网络有意义吗?

Openoffice中的电子表格,如何把最上面的一行锁定在顶端不动

R语言:日薪和应发工资

当最上面的投影包含方法调用时,EF Core 客户端评估不起作用

如何在同一个页面里放置多个这样的图片轮播代码?(现在只有最上面的有轮播效果)