Here’s our process for calculating pills per person within a county— figures that end up in many of our articles.

First, let’s load up the packages we need.

There’s a lot of new ones listed here so we can make fancy tables.

# Uncomment and run the lines below to see if you have the packages required already installed
# packages <- c("dplyr", "jsonlite", "knitr", "geofacet", "scales")
# if (length(setdiff(packages, rownames(installed.packages()))) > 0) {
#   install.packages(setdiff(packages, rownames(installed.packages())), repos = "http://cran.us.r-project.org") # }

library(arcos)
library(dplyr)
library(lubridate)
library(data.table)
library(formattable)
library(vroom)
library(stringr)
library(scales)
library(knitr)

Let’s look at all pharmacies in West Virginia and their total oxycodone and hydrocodone pill orders.

And use the total_pharmacies_state() function.

west_virginia <- total_pharmacies_state(state="WV", key="WaPo")

kable(head(west_virginia))
buyer_state buyer_county buyer_dea_no buyer_name buyer_city total_dosage_unit total_records
WV MINGO BS7437064 STROSNIDER KERMIT 13168350 7691
WV LOGAN BF0660565 FAMILY DISCOUNT PHARMACY INC MOUNT GAY 12849040 5680
WV MINGO BH6954401 HURLEY DRUG COMPANY INC WILLIAMSON 8890370 11138
WV MINGO FT0251227 TUG VALLEY PHARMACY, LLC WILLIAMSON 8827860 5390
WV GREENBRIER BM8273524 FRITZ’S PHARMACY AND WELLNESS RONCEVERTE 7528100 13997
WV MASON AF6754748 FRUTH PHARMACY INC POINT PLEASANT 7317220 9193

Looks nice. We’ve got total_dosage_unit and total_records. We can ignore total_records for this example.

Each pharmacy is listed, as well as which county it resides in.

To help normalize the number of pills ordered, we need to get each county’s population in West Virginia.

We can use the county_population() function.

population <- county_population(state="WV", key="WaPo")

kable(head(population))
BUYER_COUNTY BUYER_STATE countyfips STATE COUNTY county_name NAME variable year population
BARBOUR WV 54001 54 1 Barbour Barbour County, West Virginia B01003_001 2006 15922
BERKELEY WV 54003 54 3 Berkeley Berkeley County, West Virginia B01003_001 2006 96318
BOONE WV 54005 54 5 Boone Boone County, West Virginia B01003_001 2006 25101
BRAXTON WV 54007 54 7 Braxton Braxton County, West Virginia B01003_001 2006 14585
BROOKE WV 54009 54 9 Brooke Brooke County, West Virginia B01003_001 2006 24399
CABELL WV 54011 54 11 Cabell Cabell County, West Virginia B01003_001 2006 94943

Alright, we have population tables but they’re annual figures.

We have one number for dosage per pharmacy. We don’t need seven years of population data.

So we’ll average it out.

And then join it to the pharmacy list.

population <- population %>% 
  group_by(BUYER_COUNTY, BUYER_STATE, countyfips) %>% 
  # Figure out the average population between available years
  summarize(average_population=mean(population, na.rm=T)) %>% 
  ## Have to quickly rename these columns to make them lower case so they'll join easily to the other data frame
  rename(buyer_county=BUYER_COUNTY, buyer_state=BUYER_STATE)
#> `summarise()` has grouped output by 'BUYER_COUNTY', 'BUYER_STATE'. You can
#> override using the `.groups` argument.

## Join the data
wv_joined <- left_join(west_virginia, population)
#> Joining with `by = join_by(buyer_state, buyer_county)`

kable(head(wv_joined))
buyer_state buyer_county buyer_dea_no buyer_name buyer_city total_dosage_unit total_records countyfips average_population
WV MINGO BS7437064 STROSNIDER KERMIT 13168350 7691 54059 26752.78
WV LOGAN BF0660565 FAMILY DISCOUNT PHARMACY INC MOUNT GAY 12849040 5680 54045 36359.00
WV MINGO BH6954401 HURLEY DRUG COMPANY INC WILLIAMSON 8890370 11138 54059 26752.78
WV MINGO FT0251227 TUG VALLEY PHARMACY, LLC WILLIAMSON 8827860 5390 54059 26752.78
WV GREENBRIER BM8273524 FRITZ’S PHARMACY AND WELLNESS RONCEVERTE 7528100 13997 54025 35365.22
WV MASON AF6754748 FRUTH PHARMACY INC POINT PLEASANT 7317220 9193 54053 26878.56

Now that we’ve joined the county population data to each pharmacy, we can do some math to figure out the pills per person per year.

That’s pills / average population / 7

wv_joined <- wv_joined %>% 
  mutate(per_person=total_dosage_unit/average_population/7)

kable(head(wv_joined))
buyer_state buyer_county buyer_dea_no buyer_name buyer_city total_dosage_unit total_records countyfips average_population per_person
WV MINGO BS7437064 STROSNIDER KERMIT 13168350 7691 54059 26752.78 70.31766
WV LOGAN BF0660565 FAMILY DISCOUNT PHARMACY INC MOUNT GAY 12849040 5680 54045 36359.00 50.48481
WV MINGO BH6954401 HURLEY DRUG COMPANY INC WILLIAMSON 8890370 11138 54059 26752.78 47.47368
WV MINGO FT0251227 TUG VALLEY PHARMACY, LLC WILLIAMSON 8827860 5390 54059 26752.78 47.13988
WV GREENBRIER BM8273524 FRITZ’S PHARMACY AND WELLNESS RONCEVERTE 7528100 13997 54025 35365.22 30.40962
WV MASON AF6754748 FRUTH PHARMACY INC POINT PLEASANT 7317220 9193 54053 26878.56 38.89038

Let’s make sure we’re only dealing with chain and retail pharmacies.

This requires some supplemental data from buyer_addresses() and not_pharmacies()


## Get a list of addresses because it includes BUYER_BUS_ACT information
pharmacy_list <- buyer_addresses(state="WV", key="WaPo")

# We just want the BUYER_BUS_ACT to tell if these are practitioners are retail pharmacies
# This will help us filter out the appropriate pharmacies

pharmacy_list <- pharmacy_list %>% 
  select(buyer_dea_no=BUYER_DEA_NO, BUYER_BUS_ACT)

# Join to the original data set
wv_joined <- left_join(wv_joined, pharmacy_list)

# Filter the data so we only have retail and chain pharmacies
wv_joined <- wv_joined %>% 
  filter(BUYER_BUS_ACT=="RETAIL PHARMACY" | BUYER_BUS_ACT=="CHAIN PHARMACY")

# Just in case, let's get the BUYER_DEA_NO of pharmacies that aren't really pharmacies
not_pharms <- not_pharmacies(key="WaPo") %>% pull(BUYER_DEA_NO)

# Filter those out, too, if they're in there
wv_joined <- wv_joined %>% 
  filter(!buyer_dea_no %in% not_pharms)

# clean up column names so we can make a pretty table
wv_joined <- wv_joined %>% 
  select(Pharmacy=buyer_name, City=buyer_city, County=buyer_county, `County population`=average_population,
         Pills=total_dosage_unit, `Pills per person`=per_person) %>% 
  mutate(`County population`=round(`County population`),
         `Pills per person`=round(`Pills per person`, 1)) %>% 
  arrange(desc(`Pills per person`)) %>% 
  slice(1:100)

# Create some custome colors
customGreen0 = "#DeF7E9"
customGreen = "#71CA97"
customRed = "#ff7f7f"

# produce a table
wv_joined %>% 
  formattable(align=c("l", "l", "l", "r", "r", "r"),
              list(Pharmacy = formatter("span", style = ~ style(color="grey", font.weight = "bold")),
                   Pills=color_tile(customGreen0, customGreen),
                   `Pills per person` = normalize_bar(customRed)
                   ))
#> Joining with `by = join_by(buyer_dea_no)`
Pharmacy City County County population Pills Pills per person
STROSNIDER KERMIT MINGO 26753 13168350 70.3
FAMILY DISCOUNT PHARMACY INC MOUNT GAY LOGAN 36359 12849040 50.5
HURLEY DRUG COMPANY INC WILLIAMSON MINGO 26753 8890370 47.5
TUG VALLEY PHARMACY, LLC WILLIAMSON MINGO 26753 8827860 47.1
LARRY’S DRIVE-IN PHARMACY INC MADISON BOONE 24780 7227600 41.7
FRUTH PHARMACY INC POINT PLEASANT MASON 26879 7317220 38.9
REED’S BERKELEY SPRINGS MORGAN 17295 3939400 32.5
WESTSIDE PHARMACY OCEANA WYOMING 23793 5353990 32.1
MACE’S PHARMACY INC PHILIPPI BARBOUR 16244 3612930 31.8
PHILLIPS PHARMACY SAINT MARYS PLEASANTS 7631 1686260 31.6
FRITZ’S PHARMACY AND WELLNESS RONCEVERTE GREENBRIER 35365 7528100 30.4
HIGHLANDER PHARMACY WEBSTER SPRINGS WEBSTER 9234 1946520 30.1
BIG FOUR DRUG STORE INC HINTON SUMMERS 13739 2664450 27.7
PHARMACY INC CHAPMANVILLE LOGAN 36359 7032640 27.6
PHARMACY INC CHAPMANVILLE LOGAN 36359 7032640 27.6
RITE AID OF WEST VIRGINIA, INC. NEW MARTINSVILLE WETZEL 16598 3168780 27.3
JUDY’S DRUG STORE INC PETERSBURG GRANT 11904 2207400 26.5
RITE AID OF WEST VIRGINIA, INC. ST MARYS PLEASANTS 7631 1281320 24.0
FOLLANSBEE PHARMACY FOLLANSBEE BROOKE 24069 3899940 23.1
BATJAC OF SOUTH CAROLINA MARLINTON POCAHONTAS 8774 1397320 22.8
GIL-CO FAITH PHCY GLENVILLE GILMER 8283 1320859 22.8
FLAT IRON DRUG STORE INC WELCH MCDOWELL 22347 3431120 21.9
FRUTH PHARMACY #18 SPENCER ROANE 15043 2308890 21.9
WAL-MART PHARMACY 10-2684 NEW MARTINSVILLE WETZEL 16598 2426050 20.9
RITE AID OF WEST VIRGINIA, INC. PT PLEASANT MASON 26879 3912290 20.8
RITE AID OF WEST VIRGINIA, INC. GRAFTON TAYLOR 16715 2349790 20.1
RITE AID OF WEST VIRGINIA, INC. CLAY CLAY 9572 1280300 19.1
BEST CARE PHARMACY INC WESTON LEWIS 16496 2180940 18.9
NICHOLAS PHARMACY, INC SUMMERSVILLE NICHOLAS 26157 3439100 18.8
WEST VIRGINIA CVS PHARMACY, L.L.C. GASSAWAY BRAXTON 14551 1878800 18.4
RITE AID OF WEST VIRGINIA, INC. FRANKLIN PENDLETON 7705 993310 18.4
BLACK DIAMOND PHARMACY NORTHFORK MCDOWELL 22347 2755760 17.6
MICHEL’S PHARMACY WEST UNION DODDRIDGE 7985 961790 17.2
PHILLIPS DRUG LLC SISTERSVILLE TYLER 9249 1105230 17.1
TRI-STATE PHARMACY WEIRTON HANCOCK 30694 3539710 16.5
FOUR SEASONS PHARMACY INC PRINCETON MERCER 61867 7099410 16.4
MOUNDSVILLE PHARMACY MOUNDSVILLE MARSHALL 33215 3808030 16.4
WAL-MART PHARMACY 10-2849 MASON MASON 26879 3010650 16.0
RITE AID OF WEST VIRGINIA, INC. HARRISVILLE RITCHIE 10428 1165930 16.0
CARL WALKER’S DRUG STORE GASSAWAY BRAXTON 14551 1623340 15.9
POCAHONTAS PHARMACY MARLINTON POCAHONTAS 8774 977390 15.9
WEST VIRGINIA CVS PHARMACY, L.L.C. WESTON LEWIS 16496 1793260 15.5
DENNIS’, PHARMACY LLC HAMLIN LINCOLN 21860 2349260 15.4
WEST VIRGINIA CVS PHARMACY, L.L.C. MOUNDSVILLE MARSHALL 33215 3551300 15.3
UNITED PHARMACY GROUP OCEANA WYOMING 23793 2552680 15.3
WAL-MART PHARMACY 10-2810 SPENCER ROANE 15043 1612830 15.3
CLAY FOODLAND PHARMACY CLAY CLAY 9572 1003280 15.0
WEST VIRGINIA CVS PHARMACY, L.L.C. ROMNEY HAMPSHIRE 23459 2419200 14.7
RITE AID OF WEST VIRGINIA, INC. BRANCHLAND LINCOLN 21860 2218910 14.5
MOUNTAIN LAKE PHARMACY SUMMERSVILLE NICHOLAS 26157 2617790 14.3
KROGER PHARMACY MADISON BOONE 24780 2483700 14.3
WEST VIRGINIA CVS PHARMACY, L.L.C. MOOREFIELD HARDY 13801 1331100 13.8
PHARMACY CARE, INC. PINEVILLE WYOMING 23793 2262020 13.6
KROGER PHARMACY LOGAN LOGAN 36359 3441400 13.5
RITE AID OF WEST VIRGINIA, INC. WEBSTER SPRINGS WEBSTER 9234 857680 13.3
PETERSTOWN PHARMACY, LLC PETERSTOWN MONROE 13515 1253120 13.2
RITE AID OF WEST VIRGINIA, INC. GRANTSVILLE CALHOUN 7550 697330 13.2
WEST VIRGINIA CVS PHARMACY, L.L.C. KEYSER MINERAL 27709 2541900 13.1
WAL-MART PHARMACY 10-2610 LOGAN LOGAN 36359 3251160 12.8
WAL-MART PHARMACY 10-1477 SUMMERSVILLE NICHOLAS 26157 2329350 12.7
RITE AID OF WEST VIRGINIA, INC. GLENVILLE GILMER 8283 716400 12.4
TOWN PHARMACY CARE MAN LOGAN 36359 3055510 12.0
WAL-MART PHARMACY 10-1653 WESTON LEWIS 16496 1388800 12.0
RITE AID OF WEST VIRGINIA, INC. SUTTON BRAXTON 14551 1222140 12.0
COLONY DRUG BECKLEY RALEIGH 78606 6550590 11.9
CRAB ORCHARD PHARMACY, INC. CRAB ORCHARD RALEIGH 78606 6477420 11.8
WAL-MART PHARMACY 10-2696 MOOREFIELD HARDY 13801 1125820 11.7
WEST VIRGINIA CVS PHARMACY, L.L.C. SUMMERSVILLE NICHOLAS 26157 2121460 11.6
RITE AID OF WEST VIRGINIA, INC. DANVILLE BOONE 24780 2015250 11.6
WELCH PHARMACY, INC WELCH MCDOWELL 22347 1790640 11.4
HARTS PHARMACY, INC. HARTS LINCOLN 21860 1736300 11.3
WAL-MART PHARMACY 10-1522 ELKINS RANDOLPH 29170 2220600 10.9
STAATS PHCY & HLTH CARE SPENCER ROANE 15043 1145830 10.9
BURNSVILLE DRUG STORE BURNSVILLE BRAXTON 14551 1112100 10.9
T AND J ENTERPRISES INC HUNTINGTON WAYNE 42322 3210690 10.8
FRUTH RIPLEY JACKSON 29013 2192823 10.8
PENN WAY PHARMACY WEIRTON HANCOCK 30694 2296230 10.7
GREENBRIER MEDICAL ARTS PHARMACY INC UNION MONROE 13515 1013090 10.7
RITE AID OF WEST VIRGINIA, INC. CRAIGSVILLE NICHOLAS 26157 1945700 10.6
MEADOW RIVER HEALTH CARE ASSOCIATES, INC. CRAIGSVILLE NICHOLAS 26157 1944600 10.6
RITE AID OF WEST VIRGINIA, INC. HINTON SUMMERS 13739 1011540 10.5
ARACOMA DRUG CO OF CHAPMANVIL CHAPMANVILLE LOGAN 36359 2656020 10.4
FAM DISCNT PHCY OF STOLLINGS LOGAN LOGAN 36359 2639720 10.4
FAM DISCNT PHCY OF STOLLINGS LOGAN LOGAN 36359 2639720 10.4
CHARLIE’S PHARMACY OF MULLENS, LLC MULLENS WYOMING 23793 1737920 10.4
WITSCHEY’SPHARMACY NEW MARTINSVILLE WETZEL 16598 1176480 10.1
CARDINAL PHARMACY ELIZABETH WIRT 5768 409160 10.1
WAL-MART PHARMACY 10-2833 GRAFTON TAYLOR 16715 1164600 10.0
HAYES PROFESSIONAL SERVICE, LLC SISTERSVILLE TYLER 9249 647810 10.0
PENNSBORO FAMILY PHARMACY PENNSBORO RITCHIE 10428 721220 9.9
CARDINAL PHARMACY ELIZABETH WIRT 5768 399420 9.9
RITE AID OF WEST VIRGINIA, INC. WHEELING OHIO 44436 3053760 9.8
THRIFT DRUG, INC. WEIRTON HANCOCK 30694 2107570 9.8
RITE AID OF WEST VIRGINIA, INC. RAVENSWOOD JACKSON 29013 1980740 9.8
WAL-MART PHARMACY 10-1544 CLARKSBURG HARRISON 68581 4659700 9.7
MEDICINE STOP PHARMACY UNEEDA BOONE 24780 1689590 9.7
RITE AID OF WEST VIRGINIA, INC. PETERSBURG GRANT 11904 806970 9.7
RITE AID OF WEST VIRGINIA, INC. BENWOOD MARSHALL 33215 2225690 9.6
RITE AID OF WEST VIRGINIA, INC. BERKELEY SPRINGS MORGAN 17295 1156910 9.6
MAN PHARMACY MAN LOGAN 36359 2420280 9.5