在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代码,当有倍数时只保留最上面的结果的主要内容,如果未能解决你的问题,请参考以下文章
Openoffice中的电子表格,如何把最上面的一行锁定在顶端不动