Learn R Programming

⚠️There's a newer version (1.3.1) of this package.Take me there.

icd9

ICD-9 comorbidities, manipulation and validation

Calculate comorbidities, Charlson scores, perform fast and accurate validation, conversion, manipulation, filtering and comparison of ICD-9-CM (clinical modification) codes. ICD-9 codes appear numeric but leading and trailing zeroes, and both decimal and non-decimal "short" format codes exist. The package enables a work flow from raw lists of ICD-9 codes from hospital billing databases to comorbidities. ICD-9 to comorbidity mappings from Quan (Deyo and Elixhauser versions), Elixhauser and AHRQ included.

ICD-9 codes are still in wide use around the world, particularly in the USA where the ICD-9-CM (Clinical Modification) is in widespread use. ICD-10 and the corresponding ICD-10-CM are imminent, however a vast amount of patient data is recorded with ICD-9 codes of some kind: this package enables their use in R. A common requirement for medical research involving patients is determining new or existing comorbidities. This is often reported in Table 1 of research papers to demonstrate the similarity or differences of groups of patients. This package is focussed on fast and accurate generation of this comorbidity information from raw lists of ICD-9 codes.

ICD-9 codes are not numbers, and great care is needed when matching individual codes and ranges of codes. It is easy to make mistakes, hence the need for this package. ICD-9 codes can be presented in short 5 character format, or decimal format, with a decimal place separating the code into two groups. There are also codes beginning with V and E which have different validation rules. Zeroes after a decimal place are meaningful, so numeric ICD-9 codes cannot be used in most cases. In addition, most clinical databases contain invalid codes, and even decimal and non-decimal format codes in different places. This package primarily deals with ICD-9-CM (Clinical Modification) codes, but should be applicable or easily extendible to the original WHO ICD-9 system.

Main Features

  • assignment of patients to high level comorbidities based on admission or discharge ICD-9 codes
    • several mappings of ICD-9 codes to comorbidities are included (Quan, Deyo, Elixhauser, AHRQ)
    • very fast assignment of ICD-9 codes to comorbidities (using C++ internally, with automatic parallel execution using OpenMP when possible)
  • Charlson score calculation
  • validation of ICD-9 codes
  • summarizing ICD-9 codes into groups, and to human-readable descriptions
  • conversion between different representations of ICD-9 codes, with and without a decimal point
  • comprehensive tests to increase confidence in accurate processing of ICD-9 codes.

New since last CRAN release:

  • big performance increase: 1 million ICD-9 codes assigned to comorbidities in a couple of seconds
  • logical matrix or data.frame for comorbidity output and manipulation
  • see NEWS.md and github changelog for more details

Examples

See the vignettea and code help for many more examples. Here's a taste,

patientData
#>   visitId  icd9  poa
#> 1    1000 40201    Y
#> 2    1000  2258 <NA>
#> 3    1000  7208    N
#> 4    1000 25001    Y
#> 5    1001 34400    X
#> 6    1001  4011    Y
#> 7    1002  4011    E

# get comorbidities:
icd9ComorbidQuanDeyo(patientData)
#>         MI   CHF   PVD Stroke Dementia Pulmonary Rheumatic   PUD LiverMild
#> 1000 FALSE  TRUE FALSE  FALSE    FALSE     FALSE     FALSE FALSE     FALSE
#> 1001 FALSE FALSE FALSE  FALSE    FALSE     FALSE     FALSE FALSE     FALSE
#> 1002 FALSE FALSE FALSE  FALSE    FALSE     FALSE     FALSE FALSE     FALSE
#>         DM  DMcx Paralysis Renal Cancer LiverSevere  Mets   HIV
#> 1000  TRUE FALSE     FALSE FALSE  FALSE       FALSE FALSE FALSE
#> 1001 FALSE FALSE      TRUE FALSE  FALSE       FALSE FALSE FALSE
#> 1002 FALSE FALSE     FALSE FALSE  FALSE       FALSE FALSE FALSE

# find diagnoses present on admission:
icd9FilterPoa(patientData)
#>   visitId  icd9
#> 1    1000 40201
#> 4    1000 25001
#> 6    1001  4011

# reformat input data:
patientData %>% icd9LongToWide # everything works well with magrittr
#>      [,1]    [,2]   [,3]   [,4]   
#> 1000 "40201" "2258" "7208" "25001"
#> 1001 "34400" "4011" NA     NA     
#> 1002 "4011"  NA     NA     NA

Install

The latest version is available in github and can be installed with:

# install.packages("devtools") # if needed
devtools::install_github("jackwasey/icd9")

install.packages("magrittr") # recommended, but not required

The master branch at github should always build and pass all tests and R CMD check, and will be similar or identical to the most recent CRAN release. The CRAN releases are stable milestones. Contributions and bug reports are encouraged.

Copy Link

Version

Monthly Downloads

28

Version

1.1

License

GPL-3

Issues

Pull Requests

Stars

Forks

Maintainer

Jack O Wasey

Last Published

March 13th, 2021

Functions in icd9 (1.1)

icd9Chapters

ICD-9-CM chapters
icd9Children

Expand ICD-9 codes to all possible sub-codes
icd9PartsToShort

work around Rcpp issue https://github.com/RcppCore/Rcpp/issues/272
icd9IsValidMapping

validate an icd9 mapping to comorbidities
icd9Count

count ICD codes or comorbidities for each patient
icd9Benchmark

benchmark and profile major functions with larger data sets
icd9ExtractAlphaNumeric

extract alphabetic, and numeric part of icd9 code prefix
icd9FilterPoa

Filters data frame based on present-on-arrival flag
icd9ComorbidDfToMat

convert matrix of comorbidities into data frame, preserving visitId information
icd9ComorbidMatToDf

convert matrix of comorbidities into data frame, preserving visitId information
icd9GetValid

invalid subset of decimal or short ICD-9 codes
sasFormatExtract

extract assignments from a SAS FORMAT definition.
quanElixComorbid

Quan adaptation of Elixhauser comorbidities
icd9AddLeadingZeroesShort

Add leading zeroes to incomplete ICD codes
icd9Explain

explain ICD9 codes
elixComorbid

Elixhauser comorbidities
read.zip.url

read file from zip at URL
parseElix

Generate Elixhauser comorbidities
icd9-package

tools for working with ICD-9 codes, and finding comorbidities
elixComorbidNames

Comorbidity names
icd9GuessIsShort

guess whether short or long
icd9DiffComorbid

show the difference between two comorbidity mappings
icd9InReferenceCode

match ICD9 codes
icd9Hierarchy

ICD9-CM diagnosis code lookup
logicalToBinary

encode TRUE as 1, and FALSE as 0 (integers)
icd9IsValid

check whether ICD-9 codes are syntactically valid
icd9ParseAndSaveMappings

parse all known mappings and save to development tree
parseIcd9Descriptions

read the ICD-9-CM description data as provided by the Center for Medicaid Services.
ahrqComorbidAll

AHRQ comorbidities, with HTN, CHF and renal failure subgroups
cr

get sequence of column indices of comorbidities
sasExtractLetStrings

extract quoted or unquoted SAS string definitions
icd9LongToWide

convert ICD data from long to wide format
ahrqComorbid

AHRQ comorbidities
parseIcd9Chapters

Read higher-level ICD-9 structure from a reliable web site
icd9Charlson

Calculate Charlson Comorbidity Index (Charlson Score)
icd9ComorbidShortCpp

find comorbidities from ICD-9 codes.
icd9DropLeadingZeroes

drop zero padding from decimal ICD-9 code.
strMultiMatch

return the actual matches from a bracketed regex
icd9IsReal

Check whether ICD-9 codes exist
icd9Condense

Condense ICD-9 code by replacing complete families with parent codes
icd9WideToLong

convert ICD data from wide to long format
parseQuanElix

Generate Quan's revised Elixhauser comorbidities
icd9ChaptersToMap

convert the chapter headings to lists of codes
icd9Is

are the given codes numeric, V or E type?
icd9GenerateSysData

Generate sysdata.rda
sasDropOtherAssignment

drop superfluous assignment name when the name is already defined.
icd9ExpandRange

take two ICD-9 codes and expand range to include all child codes
icd9FilterValid

Filter ICD-9 codes by validity.
parseQuanDeyoSas

parse original SAS code defining Quan's update of Deyo comorbidities.
sasParseAssignments

get assignments from a character string strings.
quanDeyoComorbid

Quan adaptation of Deyo/Charlson comorbidities
icd9PoaChoices

present-on-admission flags
icd9Sort

sort short-form icd9 codes
icd9ExpandMinor

expand decimal part of ICD-9 code to cover all possible sub-codes
icd9GetChapters

get ICD-9 Chapters from vector of ICD-9 codes
icd9FilterInvalid

Filter ICD-9 codes by invalidity.
parseAhrqSas

parse AHRQ data