
This function provides an open-source implementation in R similar to the Mapping tool developed by the Agency for Healthcare Research and Quality (AHRQ). It translates the ICD diagnosis codes to the a different version by the General Equivalence Mappings (GEMs) developed by the National Center for Health Statistics, Centers for Medicare and Medicaid Services (CMS), AHIMA, the American Hospital Association, and 3M Health Information Systems. The CMS GEMs currently consist of the forward mapping from ICD-9 codes to ICD-10 codes and the backward mapping from ICD-10 codes to ICD-9 codes. In addition to these two mappings, the Agency for Healthcare Research and Quality (AHRQ) also proposed translation by using the reverse mappings and multi-stage procedure.
icd_map(dx, from = 9, to = 10, year = 2018,
method = c("gem", "reverse-gem", "both", "multi-stage"),
decimal = FALSE, nomatch = c('""', NA),
output = c("character", "list", "tidy-data"), cache = TRUE, ...)
A character vector representing diagnosis codes. Each element of the vector can either represent individual diagnosis code or a set of diagnosis codes that are concartenated by commas in between.
A integer value specifying the original code version.
Currently, the available options are 9
or 10
.
A integer value specifying the original code version.
Currently, the available options are 9
or 10
. If the
input from
and to
are the same, the function will skip
all the translation and return the input dx
with a warning.
A numeric value specifying the year of the CMS GEMs. The
currently available options are 2017
and 2018
. By
default, 2018 CMS GEMs is used.
A character string specifying the translateion method. The
available options are "gem"
for CMS GEM, "reverse-gem"
for the reverse of CMS GEM, "both"
for both GEM and reverse
GEM, "multi-stage"
for multiple stage procedure. See Section
Details for more detailed description of the procedure.
A logical value. If TRUE
, the diagnosis codes would
be returned with decimal points. The default is FALSE
.
A character string indicating no translation result can be
found through the specified mapping. By default, empty strings,
""
, will be used. Another available option is NA
(or
more specific NA_character_
). In that case, the code will be
translated to NA_character_
if no translataion result can be
found.
A character value specifying the format of the output. The
avaiable options are "character"
, "list"
, and
"tidy-data"
. By default, option "character"
is used and
results in a character vector that consists of element-wise
concatenatation by commas of all the translated diagnosis codes from
the original codes. If "list"
is specified, all the translated
codes will not be concartenated and a list of character vectors will
be returned by the function. Similarly, if "tidy-data"
is
specified, a data frame in a tidy format will be returned. The first
column of the data frame consists of the original diagnosis codes; the
second column consists of the translated diagnosis codes.
A logical value specifying whether to cache all the mappings
for method = "both"
(both CMS GEM and its reverse mapping), and
method = "multi-stage"
(the multiple stage procedure). If
TRUE
by default, the specified mapping will be generated,
cached and, applied to the translation. If FALSE
, the CMS GEM
and its reverse mapping will be used for translatation every time
without cache. It is recommended to set cache = TRUE
for
translation from ICD-9 to ICD-10. For translation from ICD-10 to
ICD-9, the caching process only takes noticeable time (usually several
minutes at most) for the multi-stage procedure.
Other arguments for future usage. A warning will be thrown out
if any argument goes into ...
accidentally.
A character vector of the same length with the input vector will
be returned by default or if output = "charactor"
. A list of
character vectors will be returned if output = "list"
; A data
frame in tidy-format will be returned if output = "tidy-data"
.
See argument output
for details.
Taking the translation from ICD-9 codes to ICD-10 codes as an example, the
procedure is elaborated as follows: In stage one, the input ICD-9 codes
are mapped to ICD-10 codes using the ICD-9 to ICD-10 forward map as well
as the reverse of the ICD-10 to ICD-9 backward map. If multiStage =
FALSE
, the procedure will return the translation results from stage one
(and skip the following stages). Otherwise, the procedure will continue
and become a multiple stage process. In stage two, the ICD-10 codes
output from the stage one are mapped back to ICD-9 codes using the
backward map as well as the reverse of the forward map; In stage three, it
applies the forward map and reverse-backward map used in stage one again
to the ICD-9 codes from the stage two and return the resulting ICD-10
codes.
2017-ICD-10-CM-and-GEMs. The U.S. Centers for Medicare & Medicaid Services. 22 August, 2016. https://www.cms.gov/Medicare/Coding/ICD10/2017-ICD-10-CM-and-GEMs.html. Accessed 28 September, 2018.
2018-ICD-10-CM-and-GEMs. The U.S. Centers for Medicare & Medicaid Services. 11 August, 2017. https://www.cms.gov/Medicare/Coding/ICD10/2018-ICD-10-CM-and-GEMs.html. Accessed 28 September, 2018.
The AHRQ MapIT Automated In-house Stand-alone Mapping Tool. Agency for Healthcare Research and Quality. 26 March, 2018. https://www.qualityindicators.ahrq.gov/resources/toolkits.aspx. Accessed 28 September, 2018.
# NOT RUN {
library(touch)
### some random ICD-9 and ICD-10 codes
icd9codes <- c("0011", "001.1", "316", "29383", "E9808", "V90")
icd10codes <- c("F0390", "F0630", "F54", "F30.13", "A010", "M61019")
### forward mapping from ICD-9 to ICD-10
icd_map(icd9codes)
icd_map(icd9codes, decimal = TRUE, nomatch = NA)
### backward mapping from ICD-10 to ICD-9
icd_map(icd10codes, from = 10, to = 9)
icd_map(icd10codes, from = 10, to = 9, nomatch = NA, output = "list")
icd_map(icd10codes, from = 10, to = 9,
decimal = TRUE, nomatch = NA, output = "tidy")
### reverse-backward mapping from ICD-9 to ICD-10
icd_map(icd9codes, method = "reverse-gem")
icd_map(icd9codes, method = "reverse", decimal = TRUE, nomatch = NA)
### reverse-forward mapping from ICD-10 to ICD-9
icd_map(icd10codes, from = 10, to = 9, method = "reverse-gem")
icd_map(icd10codes, from = 10, to = 9, method = "reverse",
decimal = TRUE, nomatch = NA)
### forward and reverse-backward mapping from ICD-9 to ICD-10
icd_map(icd9codes, method = "both")
icd_map(icd9codes, method = "both", decimal = TRUE, nomatch = NA)
### backward and reverse-forward mapping from ICD-10 to ICD-9
icd_map(icd10codes, from = 10, to = 9, method = "both")
icd_map(icd10codes, from = 10, to = 9, method = "both",
decimal = TRUE, nomatch = NA)
### multi-stage process mapping ICD-9 to ICD-10
icd_map(icd9codes, method = "multi-stage")
icd_map(icd9codes, method = "multi-stage", decimal = TRUE, nomatch = NA)
### multi-stage process mapping ICD-10 to ICD-9
icd_map(icd10codes, from = 10, to = 9,
method = "multi-stage", cache = FALSE)
icd_map(icd10codes, from = 10, to = 9, method = "multi-stage",
decimal = TRUE, nomatch = NA, cache = FALSE)
# }
Run the code above in your browser using DataLab