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