2017-10-04 65 views
1

我试图将icd9代码转换为icd10代码。一些转换有多个结果。我只想保留最佳结果并将其放入新列。在R中转换icd9代码,在存在多个时保持最高结果

我有一个名为数据帧测试

> 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 

我只是想在测试中创建一个新的列,测试$ icd10,它具有每个版本的第一个结果。所以例如,当它转换1869时,它只会将其转换为C6210。我确信有一个非常简单的解决方案,但我想不起来。

+0

'convICD()'的返回值是'data.frame'。您正试图将其存储在一列中。这不会按照你认为的方式工作 – hrbrmstr

回答

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 
+0

谢谢!但它看起来像使用了第二次转换。它将1869转换为C6290而不是C6210。 – gpeterson

+0

哦,我读错了。我以为你想要最后一个。 1秒。 – hrbrmstr