Review heart failure drug guidelines. References include:
Heidenreich PA, Bozkurt B, Aguilar D, et al. 2022 AHA/ACC/HFSA guideline for the Management of Heart Failure: A report of the American College of Cardiology/American Heart Association joint committee on clinical practice guidelines. Circulation. 2022;145(18):e895-e1032.
Hood SR, Giazzon AJ, Seamon G, et al. Association between medication adherence and the outcomes of heart failure. Pharmacotherapy. 2018;38(5):539-545.
Hamo CE, Mukhopadhyay A, Li X, et al. Association between visit frequency, continuity of care, and pharmacy fill adherence in heart failure patients. Am Heart J. 2024;273:53-60.
Mukhopadhyay A, Blecker S, Li X, et al. Neighborhood-level socioeconomic status and prescription fill patterns among patients with heart failure. JAMA Netw Open. 2023;6(12):e2347519.
Yancy CW, Jessup M, Bozkurt B, et al. 2017 ACC/AHA/HFSA focused update of the 2013 ACCF/AHA guideline for the management of heart failure: A report of the American college of cardiology/American heart association task force on clinical practice guidelines and the heart failure society of America. J Card Fail. 2017;23(8):628-651.
Heart Failure Society of America. Executive summary: HFSA 2010 comprehensive heart failure practice guideline. J Card Fail. 2010;16(6):475-539.
Garred CH, Zahir D, Butt JH, et al. Adherence and discontinuation of optimal heart failure therapies according to age: A danish nationwide study. J Am Heart Assoc. 2022;11(19):e026187.
The medications included as Guideline-Directed Medical Therapy (GDMT) included the following classes, grouped into four categories:
Beta Blockers (BB)
Angiotensin-Converting Enzyme I nhibitor (ACEI), Angiotensin Receptor Blocker (ARB), or Angiotensin Receptor-Neprilysin Inhibitor (ARNI)
Mineralocorticoid Receptor Antagonist (MRA)
Sodium-Glucose Cotransporter 2 Inhibitor (SGLT2i)
Other drug classes used in heart failure but NOT included in this study due to lack of use in the literature: Diuretics, Hydral Nitrates, I Channel Inhibitors, Soluble Guanylate Cyclase Simulator, and Cardiac Glycoside
The full list of medications included as GDMT, broken down by medication class. For each medication, long-acting, short-acting, brand-name, and combination drug formulations were all included.
BB: Bisoprolol, Carvedilol, Metoprolol (Succinate or Tartrate)
ACEI: Benazepril, Captopril, Enalapril, Fosinopril, Lisinopril, Moexipril, Perindopril, Quinapril, Ramipril, Trandolapril
ARB: Azilsartan, Candesartan, Eprosartan, Irbesartan, Losartan, Olmesartan, Telmisartan, Valsartan
ARNI: Sacubritil/Valsartan
MRA: Epleronone, Spironolactone
SGLT2i:Dapagliflozin, Empagliflozin
Medications for each class were taken from 2022 AHA/ACC/HFSA Heart Failure Guidelines as well as 2023 paper by Mukhopadhyay et. al.
Download FDA National Drug Code Directory as .txt file
Import “Product.txt” file into R
All_NDC <- read.delim("~/Downloads/ndctext/product.txt")
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
HF_NDC <- filter(All_NDC,
NONPROPRIETARYNAME == "bisoprolol fumarate" |
NONPROPRIETARYNAME == "Bisoprolol fumarate" |
NONPROPRIETARYNAME == "Bisoprolol Fumarate" |
NONPROPRIETARYNAME == "BISOPROLOL FUMARATE" |
NONPROPRIETARYNAME == "bisoprolol fumarate and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Bisoprolol Fumarate and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Carvedilol" |
NONPROPRIETARYNAME == "CARVEDILOL" |
NONPROPRIETARYNAME == "carvedilol phosphate" |
NONPROPRIETARYNAME == "Carvedilol Phosphate" |
NONPROPRIETARYNAME == "CARVEDILOL PHOSPHATE" |
NONPROPRIETARYNAME == "METOPROLOL" |
NONPROPRIETARYNAME == "Metoprolol Succinate" |
NONPROPRIETARYNAME == "Metoprolol succinate" |
NONPROPRIETARYNAME == "metoprolol succinate" |
NONPROPRIETARYNAME == "METOPROLOL SUCCINATE" |
NONPROPRIETARYNAME == "Metoprolol Succinate ER Tablets" |
NONPROPRIETARYNAME == "Metoprolol Tartrate" |
NONPROPRIETARYNAME == "Metoprolol tartrate" |
NONPROPRIETARYNAME == "metoprolol tartrate" |
NONPROPRIETARYNAME == "METOPROLOL TARTRATE" |
NONPROPRIETARYNAME == "metoprolol tartrate and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Metoprolol Tartrate and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Benazepril" |
NONPROPRIETARYNAME == "Amlodipine and Benazepril Hydrochloride" |
NONPROPRIETARYNAME == "AMLODIPINE AND BENAZEPRIL HYDROCHLORIDE" |
NONPROPRIETARYNAME == "amlodipine besylate and benazepril hydrochloride" |
NONPROPRIETARYNAME == "Amlodipine Besylate and Benazepril Hydrochloride" |
NONPROPRIETARYNAME == "benazepril hydrochloride" |
NONPROPRIETARYNAME == "Benazepril Hydrochloride" |
NONPROPRIETARYNAME == "Benazepril hydrochloride" |
NONPROPRIETARYNAME == "benazepril hydrochloride and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Benazepril Hydrochloride and HydrochlorothiazideE" |
NONPROPRIETARYNAME == "BENAZEPRIL HYDROCHLORIDE" |
NONPROPRIETARYNAME == "Captopril" |
NONPROPRIETARYNAME == "captopril" |
NONPROPRIETARYNAME == "CAPTOPRIL AND HYDROCHLOROTHIAZIDE" |
NONPROPRIETARYNAME == "enalapril maleate" |
NONPROPRIETARYNAME == "Enalapril" |
NONPROPRIETARYNAME == "Enalapril maleate" |
NONPROPRIETARYNAME == "Enalapril Maleate" |
NONPROPRIETARYNAME == "ENALAPRIL MALEATE" |
NONPROPRIETARYNAME == "enalapril maleate and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Enalapril maleate and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Enalapril Maleate and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Enalapril Maleate Oral Solution" |
NONPROPRIETARYNAME == "Fosinopril" |
NONPROPRIETARYNAME == "fosinopirl sodium" |
NONPROPRIETARYNAME == "Fosinopril sodium" |
NONPROPRIETARYNAME == "Fosinopril Sodium" |
NONPROPRIETARYNAME == "Fosinopril Sodium and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Lisinopril" |
NONPROPRIETARYNAME == "lisinopril" |
NONPROPRIETARYNAME == "LISINOPRIL" |
NONPROPRIETARYNAME == "lisinopril and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Lisinopril and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Lisinopril and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "LISINOPRIL and HYDROCHLOROTHIAZIDE" |
NONPROPRIETARYNAME == "LISINOPRIL AND HYDROCHLOROTHIAZIDE" |
NONPROPRIETARYNAME == "Lisinopril and Hydrochlorothiazide Tablets" |
NONPROPRIETARYNAME == "Lisinopril/HCTZ" |
NONPROPRIETARYNAME == "Moexipril Hydrochloride" |
NONPROPRIETARYNAME == "Perindopril Erbumine" |
NONPROPRIETARYNAME == "Quinapril" |
NONPROPRIETARYNAME == "quinapril" |
NONPROPRIETARYNAME == "Quinapril and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "quinapril and Hydrochlorothiazide 10/12.5" |
NONPROPRIETARYNAME == "Quinapril and Hydrochlorothiazide 20/12.5" |
NONPROPRIETARYNAME == "Quinapril and Hydrochlorothiazide 20/25" |
NONPROPRIETARYNAME == "Quinapril HCl and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Quinapril HCL and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Quinapril Hydrochloride" |
NONPROPRIETARYNAME == "QUINAPRIL HYDROCHLORIDE/HYDROCHLOROTHIAZIDE" |
NONPROPRIETARYNAME == "Ramipril" |
NONPROPRIETARYNAME == "ramipril" |
NONPROPRIETARYNAME == "Trandolapril" |
NONPROPRIETARYNAME == "Trandolapril and Verapamil Hydrochloride" |
NONPROPRIETARYNAME == "Trandolapril Tablets" |
NONPROPRIETARYNAME == "Azilsartan kamedoxomil and chlorthalidone" |
NONPROPRIETARYNAME == "Azilsartan kamedoxomil" |
NONPROPRIETARYNAME == "Candesartan" |
NONPROPRIETARYNAME == "candesartan cilexetil" |
NONPROPRIETARYNAME == "Candesartan cilexetil" |
NONPROPRIETARYNAME == "Candesartan Cilexetil" |
NONPROPRIETARYNAME == "CANDESARTAN CILEXETIL" |
NONPROPRIETARYNAME == "candesartan cilexetil and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Candesartan Cilexetil and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Eprosartan" |
NONPROPRIETARYNAME == "Irbesartan" |
NONPROPRIETARYNAME == "irbesartan" |
NONPROPRIETARYNAME == "IRBESARTAN" |
NONPROPRIETARYNAME == "irbesartan and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Irbesartan and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Losartan" |
NONPROPRIETARYNAME == "losartan potassium" |
NONPROPRIETARYNAME == "Losartan potassium" |
NONPROPRIETARYNAME == "Losartan Potassium" |
NONPROPRIETARYNAME == "LOSARTAN POTASSIUM" |
NONPROPRIETARYNAME == "losartan potassium and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Losartan potassium and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Losartan Potassium and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "LOSARTAN POTASSIUM AND HYDROCHLOROTHIAZIDE" |
NONPROPRIETARYNAME == "Olmesartan" |
NONPROPRIETARYNAME == "Aamlodipine and Olmesartan Medoxomil" |
NONPROPRIETARYNAME == "Amlodipine and olmesartan Medoxomil" |
NONPROPRIETARYNAME == "Amlodipine and Olmesartan Medoxomil" |
NONPROPRIETARYNAME == "AMLODIPINE and OLMESARTAN medoxomil" |
NONPROPRIETARYNAME == "amlodipine besylate and olmesartan medoxomil" |
NONPROPRIETARYNAME == "Amlodipine besylate and Olmesartan medoxomil" |
NONPROPRIETARYNAME == "olmesartan medoxomil" |
NONPROPRIETARYNAME == "Olmesartan medoxomil" |
NONPROPRIETARYNAME == "Olmesartan Medoxomil" |
NONPROPRIETARYNAME == "OLMESARTAN MEDOXOMIL" |
NONPROPRIETARYNAME == "olmesartan medoxomil / amlodipine besylate / hydrochlorothiazide" |
NONPROPRIETARYNAME == "Olmesartan medoxomil Amlodipine and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "olmesartan medoxomil and amlodipine besylate and hydrochlorothiazide" |
NONPROPRIETARYNAME == "olmesartan medoxomil and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Olmesartan medoxomil and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Olmesartan Medoxomil and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "OLMESARTAN MEDOXOMIL and HYDROCHLOROTHIAZIDE" |
NONPROPRIETARYNAME == "OLMESARTAN MEDOXOMIL AND HYDROCHLOROTHIAZIDE" |
NONPROPRIETARYNAME == "olmesartan medoxomil-hydrochlorothiazide" |
NONPROPRIETARYNAME == "Olmesartan medoxomil, amlodipine and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Olmesartan Medoxomil, Amlodipine and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Olmesartan Medoxomil, Amlodipine and Hydrochlorothiazide Tablet 20/5/12.5 mg" |
NONPROPRIETARYNAME == "Telmisartan" |
NONPROPRIETARYNAME == "telmisartan" |
NONPROPRIETARYNAME == "TELMISARTAN" |
NONPROPRIETARYNAME == "telmisartan and amlodipine" |
NONPROPRIETARYNAME == "Telmisartan and Amlodipine" |
NONPROPRIETARYNAME == "telmisartan and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Telmisartan and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "telmisartan, amlodipine and indapamide" |
NONPROPRIETARYNAME == "amlodipine and valsartan" |
NONPROPRIETARYNAME == "Amlodipine and valsartan" |
NONPROPRIETARYNAME == "Amlodipine and Valsartan" |
NONPROPRIETARYNAME == "AMLODIPINE AND VALSARTAN" |
NONPROPRIETARYNAME == "amlodipine besylate valsartan hydrochlorothiazide" |
NONPROPRIETARYNAME == "amlodipine besylate and valsartan" |
NONPROPRIETARYNAME == "amlodipine valsartan and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Amlodipine, Valsartan and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "amlodipine,valsartan and hydrochlorothiazide" |
NONPROPRIETARYNAME == "valsartan" |
NONPROPRIETARYNAME == "Valsartan" |
NONPROPRIETARYNAME == "VALSARTAN" |
NONPROPRIETARYNAME == "valsartan and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Valsartan and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "Valsartan oral" |
NONPROPRIETARYNAME == "sacubitril and valsartan" |
NONPROPRIETARYNAME == "Sacubitril and valsartan" |
NONPROPRIETARYNAME == "Sacubitril and Valsartan" |
NONPROPRIETARYNAME == "eplerenone" |
NONPROPRIETARYNAME == "Eplerenone" |
NONPROPRIETARYNAME == "EPLERENONE" |
NONPROPRIETARYNAME == "spironolactone" |
NONPROPRIETARYNAME == "Spironolactone" |
NONPROPRIETARYNAME == "SPIRONOLACTONE" |
NONPROPRIETARYNAME == "spironolactone and hydrochlorothiazide" |
NONPROPRIETARYNAME == "Spironolactone and Hydrochlorothiazide" |
NONPROPRIETARYNAME == "DAPAGLIFLOZIN" |
NONPROPRIETARYNAME == "dapagliflozin and metformin hydrochloride" |
NONPROPRIETARYNAME == "dapagliflozin and saxagliptin" |
NONPROPRIETARYNAME == "Empagliflozin" |
NONPROPRIETARYNAME == "empagliflozin and linagliptin" |
NONPROPRIETARYNAME == "empagliflozin and metformin hydrochloride" |
NONPROPRIETARYNAME == "empagliflozin, linagliptin, metformin hydrochloride" |
NONPROPRIETARYNAME == "empagliflozin, metformin hydrochloride")
NDCs are provided by the database in 8 and 9 digit format, eliminating the 2-digit “package code” at the end of the typical 5-4-2 format. This is represented in the example below with an “-X”
To convert to a standard 9 digit NDC code (would be 11-digit NDC code if including the package code) requires adding a “0” based on the existing NDC format.
| 8-Digit Format on Package | 8-Digit Format Example | 9-Digit Format on Package | 9-Digit Format Example |
|---|---|---|---|
| 4-4-X | 9999-9999-X | 5-4-X | 09999-9999-X |
| 5-3-X | 99999-999-X | 5-4-X | 99999-0999-X |
##Load Packages##
library(stats)
library(readr)
library(compare)
##
## Attaching package: 'compare'
## The following object is masked from 'package:base':
##
## isTRUE
#Subset the Dataset##
NDC_8 <- subset(HF_NDC, select = c("PRODUCTNDC","DOSAGEFORMNAME", "LABELERNAME", "SUBSTANCENAME", "ACTIVE_NUMERATOR_STRENGTH","PHARM_CLASSES"))
unique_NDC_8 <- unique(NDC_8)
#Identify the NDC Package Code by Format#
#NDC can be formatted as 4-4 or 5-3 (see above)#
isFmt44 <- grepl("[[:alnum:]]{4}-[[:alnum:]]{4}", unique_NDC_8$PRODUCTNDC)
isFmt53 <- grepl("[[:alnum:]]{5}-[[:alnum:]]{3}", unique_NDC_8$PRODUCTNDC)
fmt <- rep(NA, nrow(unique_NDC_8))
fmt[isFmt44] <- "4-4 format"
fmt[isFmt53] <- "5-3 format"
table(fmt, useNA="ifany")
## fmt
## 4-4 format 5-3 format
## 236 2869
##Extract NDC Code by Format##
NDC_44 <- unique_NDC_8[isFmt44,]
NDC_53 <- unique_NDC_8[isFmt53,]
unique_NDC_8$fmtNDC <- format(fmt)
##Conversion##
#Convert 8-digit NDC to 9-digit NDC at this step#
ndcSplit <- strsplit(unique_NDC_8$PRODUCTNDC, "-")
ndcSplit <- data.frame(matrix(unlist(ndcSplit), ncol=2, byrow=TRUE))
unique_NDC_8$ndcFmt9[isFmt44] <- paste0("0", ndcSplit$X1[isFmt44],
ndcSplit$X2[isFmt44],
ndcSplit$X3[isFmt44])
unique_NDC_8$ndcFmt9[isFmt53] <- paste0( ndcSplit$X1[isFmt53],
"0", ndcSplit$X2[isFmt53],
ndcSplit$X3[isFmt53])
f <- "NDCTable.txt"
write.table(unique_NDC_8, f, quote=FALSE, sep="\t", row.names=FALSE)
names(unique_NDC_8)
## [1] "PRODUCTNDC" "DOSAGEFORMNAME"
## [3] "LABELERNAME" "SUBSTANCENAME"
## [5] "ACTIVE_NUMERATOR_STRENGTH" "PHARM_CLASSES"
## [7] "fmtNDC" "ndcFmt9"
str(unique_NDC_8)
## 'data.frame': 3105 obs. of 8 variables:
## $ PRODUCTNDC : chr "0024-5851" "0024-5852" "0024-5855" "0024-5856" ...
## $ DOSAGEFORMNAME : chr "TABLET, FILM COATED" "TABLET, FILM COATED" "TABLET, FILM COATED" "TABLET, FILM COATED" ...
## $ LABELERNAME : chr "Sanofi-Aventis U.S. LLC" "Sanofi-Aventis U.S. LLC" "Sanofi-Aventis U.S. LLC" "Sanofi-Aventis U.S. LLC" ...
## $ SUBSTANCENAME : chr "IRBESARTAN" "IRBESARTAN" "HYDROCHLOROTHIAZIDE; IRBESARTAN" "HYDROCHLOROTHIAZIDE; IRBESARTAN" ...
## $ ACTIVE_NUMERATOR_STRENGTH: chr "150" "300" "12.5; 150" "12.5; 300" ...
## $ PHARM_CLASSES : chr "Angiotensin 2 Receptor Antagonists [MoA], Angiotensin 2 Receptor Blocker [EPC]" "Angiotensin 2 Receptor Antagonists [MoA], Angiotensin 2 Receptor Blocker [EPC]" "Angiotensin 2 Receptor Antagonists [MoA], Angiotensin 2 Receptor Blocker [EPC], Increased Diuresis [PE], Thiazi"| __truncated__ "Angiotensin 2 Receptor Antagonists [MoA], Angiotensin 2 Receptor Blocker [EPC], Increased Diuresis [PE], Thiazi"| __truncated__ ...
## $ fmtNDC : chr "4-4 format" "4-4 format" "4-4 format" "4-4 format" ...
## $ ndcFmt9 : chr "000245851" "000245852" "000245855" "000245856" ...
write.csv(unique_NDC_8, "9DigitNDC.csv", row.names=FALSE)
write.csv(HF_NDC, "HeartFailure_NDC.csv")
library(tidyr)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ purrr 1.2.1
## ✔ ggplot2 4.0.1 ✔ stringr 1.6.0
## ✔ lubridate 1.9.4 ✔ tibble 3.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Aline_All <- read.csv("~/Downloads/ndctext/Aline.csv")
Aline_Subset <- subset(Aline_All, select = c("Product.NDC", "Substance.Name", "NDC.Package.Code"))
Aline_Join <- Aline_Subset %>%
mutate(chop_NDC = substr(Aline_Subset$Product.NDC, 1, 9))
BothNDC <- full_join(
unique_NDC_8,
Aline_Join,
by = join_by( PRODUCTNDC == chop_NDC),
)
write.csv(BothNDC, "AlineTaylorMerge.csv", row.names=FALSE)