comorbidity {comorbidity}R Documentation

Comorbidity mapping.


Maps comorbidity conditions using algorithms from the Charlson and the Elixhauser comorbidity scores.


comorbidity(x, id, code, map, assign0, labelled = TRUE, = TRUE)



A tidy data.frame (or a data.table; tibbles are supported too) with one column containing an individual ID and a column containing all diagnostic codes. Extra columns other than ID and codes are discarded. Column names must be syntactically valid names, otherwise they are forced to be so by calling the make.names() function.


Column of x containing the individual ID.


Column of x containing diagnostic codes. Codes must be in upper case with no punctuation in order to be properly recognised.


The mapping algorithm to be used (values are case-insensitive). Possible values are the Charlson score with either ICD-10 or ICD-9-CM codes (charlson_icd10_quan, charlson_icd9_quan) and the Elixhauser score, again using either ICD-10 or ICD-9-CM (elixhauser_icd10_quan, elixhauser_icd9_quan). These mapping are based on the paper by Quan et al. (2011). It is also possible to obtain a Swedish (charlson_icd10_se) or Australian (charlson_icd10_am) modification of the Charlson score using ICD-10 codes.


Apply a hierarchy of comorbidities: should a comorbidity be present in a patient with different degrees of severity, then the milder form will be assigned a value of 0. By doing this, a type of comorbidity is not counted more than once in each patient. The comorbidities that are affected by this argument are:

  • "Mild liver disease" (mld) and "Moderate/severe liver disease" (msld) for the Charlson score;

  • "Diabetes" (diab) and "Diabetes with complications" (diabwc) for the Charlson score;

  • "Cancer" (canc) and "Metastatic solid tumour" (metacanc) for the Charlson score;

  • "Hypertension, uncomplicated" (hypunc) and "Hypertension, complicated" (hypc) for the Elixhauser score;

  • "Diabetes, uncomplicated" (diabunc) and "Diabetes, complicated" (diabc) for the Elixhauser score;

  • "Solid tumour" (solidtum) and "Metastatic cancer" (metacanc) for the Elixhauser score.


Attach labels to each comorbidity, compatible with the RStudio viewer via the utils::View() function. Defaults to TRUE.

Tidy diagnostic codes? If TRUE, all codes are converted to upper case and all non-alphanumeric characters are removed using the regular expression [^[:alnum:]]. Defaults to TRUE.


The ICD-10 and ICD-9-CM coding for the Charlson and Elixhauser scores is based on work by Quan et al. (2005). ICD-10 and ICD-9 codes must be in upper case and with alphanumeric characters only in order to be properly recognised; set = TRUE to properly tidy the codes automatically. A message is printed to the R console when non-alphanumeric characters are found.


A data frame with id, columns relative to each comorbidity domain, comorbidity score, weighted comorbidity score, and categorisations of such scores, with one row per individual.

For the Charlson score, the following variables are included in the dataset:

Conversely, for the Elixhauser score the dataset contains the following variables:

Labels are presented to the user when using the RStudio viewer (e.g. via the utils::View() function) for convenience.


Quan H, Sundararajan V, Halfon P, Fong A, Burnand B, Luthi JC, et al. Coding algorithms for defining comorbidities in ICD-9-CM and ICD-10 administrative data. Medical Care 2005; 43(11):1130-1139.

Charlson ME, Pompei P, Ales KL, et al. A new method of classifying prognostic comorbidity in longitudinal studies: development and validation. Journal of Chronic Diseases 1987; 40:373-383.

Ludvigsson JF, Appelros P, Askling J et al. Adaptation of the Charlson Comorbidity Index for register-based research in Sweden. Clinical Epidemiology 2021; 13:21-41.

Sundararajan V, Henderson T, Perry C, Muggivan A, Quan H, Ghali WA. New ICD-10 version of the Charlson comorbidity index predicted in-hospital mortality. Journal of Clinical Epidemiology 2004; 57(12):1288-1294.


x <- data.frame(
  id = sample(1:15, size = 200, replace = TRUE),
  code = sample_diag(200),
  stringsAsFactors = FALSE

# Charlson score based on ICD-10 diagnostic codes:
comorbidity(x = x, id = "id", code = "code", map = "charlson_icd10_quan", assign0 = FALSE)

# Elixhauser score based on ICD-10 diagnostic codes:
comorbidity(x = x, id = "id", code = "code", map = "elixhauser_icd10_quan", assign0 = FALSE)

[Package comorbidity version 1.0.2 Index]