Introduction

This report profiles a directory of 4,826 U.S. hospitals, drawn from a CMS-style facility file that records each hospital’s name, address, county, hospital type, ownership category, and whether it offers emergency services. The goal is descriptive: to characterize how American hospital care is organized structurally — by facility type, by who owns it, by whether it provides emergency care, and by where it is located — rather than to evaluate quality or outcomes, which this file does not contain.

hospitals <- read_csv("hospital-data.csv", col_types = cols(.default = "c"))

# Standardize a few obviously inconsistent fields before analysis
hospitals <- hospitals %>%
  mutate(
    `Hospital Ownership` = str_squish(str_replace_all(`Hospital Ownership`, "\\s*-\\s*", " - ")),
    Ownership_Broad = case_when(
      str_detect(`Hospital Ownership`, "Government")            ~ "Government",
      str_detect(`Hospital Ownership`, "Voluntary non-profit")   ~ "Non-profit",
      str_detect(`Hospital Ownership`, "Proprietary")            ~ "Proprietary (for-profit)",
      TRUE                                                       ~ "Other / Unclassified"
    ),
    `Hospital Type` = str_squish(`Hospital Type`)
  )

About the data

tibble(
  Metric = c("Total hospitals", "Distinct hospital names", "States / territories represented",
             "Distinct counties", "Distinct cities", "Rows missing a county value"),
  Value = c(
    comma(nrow(hospitals)),
    comma(n_distinct(hospitals$`Hospital Name`)),
    n_distinct(hospitals$State),
    comma(n_distinct(hospitals$County, na.rm = TRUE)),
    comma(n_distinct(hospitals$City)),
    sum(is.na(hospitals$County))
  )
) %>%
  kable(caption = "Dataset snapshot") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Dataset snapshot
Metric Value
Total hospitals 4,826
Distinct hospital names 4,624
States / territories represented 56
Distinct counties 1,532
Distinct cities 2,889
Rows missing a county value 21

The file is essentially complete for the fields that matter most to this analysis — hospital type, ownership, and emergency-services status are populated for every record. The only meaningful gap is County, missing for 21 facilities (mostly VA medical centers and a handful of hospitals in island territories). Hospital Ownership also arrived with inconsistent spacing and hyphenation (e.g. “Voluntary non-profit-Private” vs. “Voluntary non-profit - Private”), which was standardized before analysis, and a small number of duplicate hospital names exist because health systems reuse names for facilities in different cities.


Facility type

type_summary <- hospitals %>%
  count(`Hospital Type`, sort = TRUE) %>%
  mutate(Share = percent(n / sum(n), accuracy = 0.1))

type_summary %>%
  kable(col.names = c("Hospital Type", "Count", "Share of Total"),
        caption = "Hospitals by type") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Hospitals by type
Hospital Type Count Share of Total
Acute Care Hospitals 3491 72.3%
Critical Access Hospitals 1184 24.5%
ACUTE CARE - VETERANS ADMINISTRATION 129 2.7%
Childrens 22 0.5%
ggplot(type_summary, aes(x = fct_reorder(`Hospital Type`, n), y = n)) +
  geom_col(fill = "#2c7fb8") +
  geom_text(aes(label = comma(n)), hjust = -0.15, size = 3.5) +
  coord_flip(clip = "off") +
  scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.15))) +
  labs(title = "Hospital type distribution", x = NULL, y = "Number of hospitals") +
  theme_minimal(base_size = 12)

General acute care hospitals dominate the file (72%), but Critical Access Hospitals — small, typically rural facilities capped at 25 beds under a separate Medicare payment designation — make up nearly a quarter (24.5%) of all listed hospitals. That is a substantial share, and it signals that this directory captures the long tail of small rural providers, not just large urban medical centers. VA-run acute care facilities (2.7%) and dedicated children’s hospitals (0.5%) round out the remainder.


Ownership structure

hospitals %>%
  count(`Hospital Ownership`, sort = TRUE) %>%
  mutate(Share = percent(n / sum(n), accuracy = 0.1)) %>%
  kable(col.names = c("Ownership Category (as recorded)", "Count", "Share"),
        caption = "Hospitals by detailed ownership category") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  scroll_box(height = "350px")
Hospitals by detailed ownership category
Ownership Category (as recorded) Count Share
Voluntary non - profit - Private 1683 34.9%
Proprietary 817 16.9%
Voluntary non - profit - Other 645 13.4%
Government - Hospital District or Authority 528 10.9%
Voluntary non - profit - Church 450 9.3%
Government - Local 423 8.8%
Government Federal 141 2.9%
Government - State 70 1.5%
Government - Federal 69 1.4%
own_broad <- hospitals %>%
  count(Ownership_Broad, sort = TRUE) %>%
  mutate(Share = n / sum(n))

ggplot(own_broad, aes(x = "", y = n, fill = fct_reorder(Ownership_Broad, n))) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  geom_text(aes(label = percent(Share, accuracy = 1)),
            position = position_stack(vjust = 0.5), color = "white", fontface = "bold") +
  scale_fill_brewer(palette = "Blues", direction = -1) +
  labs(title = "Ownership structure, grouped", fill = NULL) +
  theme_void(base_size = 12) +
  theme(legend.position = "right")

Once the raw categories are grouped into their three natural buckets, the picture is clear: non-profit ownership is the backbone of the U.S. hospital system, accounting for roughly 58% of facilities when voluntary non-profit (private, church-affiliated, and “other”) categories are combined. Government-owned hospitals — spanning federal (including VA), state, and local/hospital-district authorities — account for about a quarter (25.5%), reflecting the large number of county and hospital-district facilities that serve as safety-net or rural providers. Proprietary, for-profit hospitals are the smallest of the three broad groups at 17%, though they are heavily concentrated in a handful of large multi-state systems and specific states (see the geographic section below).

hospitals %>%
  filter(`Hospital Type` %in% c("Acute Care Hospitals", "Critical Access Hospitals")) %>%
  count(`Hospital Type`, Ownership_Broad) %>%
  group_by(`Hospital Type`) %>%
  mutate(Share = percent(n / sum(n), accuracy = 1)) %>%
  ungroup() %>%
  pivot_wider(names_from = Ownership_Broad, values_from = c(n, Share)) %>%
  kable(caption = "Ownership mix within the two largest hospital types") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Ownership mix within the two largest hospital types
Hospital Type n_Government n_Other / Unclassified n_Proprietary (for-profit) Share_Government Share_Other / Unclassified Share_Proprietary (for-profit)
Acute Care Hospitals 647 2081 763 19% 60% 22%
Critical Access Hospitals 454 677 53 38% 57% 4%

Ownership mix varies meaningfully by facility type: Critical Access Hospitals skew government-owned (roughly 40% government vs. under 5% proprietary), consistent with their role as locally-supported rural anchors, while general acute care hospitals have a much larger for-profit presence, since large multi-state hospital corporations concentrate their facilities in this category.


Emergency services availability

er_summary <- hospitals %>%
  count(`Emergency Services`, sort = TRUE) %>%
  mutate(Share = percent(n / sum(n), accuracy = 0.1))

er_summary %>%
  kable(col.names = c("Emergency Services", "Count", "Share"),
        caption = "Emergency services status") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Emergency services status
Emergency Services Count Share
Yes 4572 94.7%
No 231 4.8%
Not Available 23 0.5%

Emergency services are nearly universal (94.7% of hospitals report offering them), but 231 facilities (4.8%) explicitly do not, and another 23 have no status on record. The absence of emergency care is not evenly distributed:

hospitals %>%
  filter(`Emergency Services` == "No") %>%
  count(Ownership_Broad, sort = TRUE) %>%
  mutate(Share = percent(n / sum(n), accuracy = 0.1)) %>%
  kable(col.names = c("Ownership (broad)", "Hospitals w/o ER", "Share of no-ER hospitals"),
        caption = "Which ownership types most often lack emergency services") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Which ownership types most often lack emergency services
Ownership (broad) Hospitals w/o ER Share of no-ER hospitals
Proprietary (for-profit) 99 42.9%
Other / Unclassified 90 39.0%
Government 42 18.2%
hospitals %>%
  count(`Hospital Type`, `Emergency Services`) %>%
  group_by(`Hospital Type`) %>%
  mutate(Share = n / sum(n)) %>%
  filter(`Emergency Services` == "Yes") %>%
  arrange(Share) %>%
  kable(col.names = c("Hospital Type", "Emergency Services", "Count", "Share with ER"),
        caption = "Share of each hospital type offering emergency services") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Share of each hospital type offering emergency services
Hospital Type Emergency Services Count Share with ER
Childrens Yes 20 0.9090909
Acute Care Hospitals Yes 3265 0.9352621
Critical Access Hospitals Yes 1158 0.9780405
ACUTE CARE - VETERANS ADMINISTRATION Yes 129 1.0000000

Proprietary (for-profit) hospitals are disproportionately likely to operate without an emergency department — they account for 17% of all hospitals but 43% of hospitals lacking emergency services. This is consistent with a well-documented pattern in U.S. health care: many for-profit facilities are specialty or surgical hospitals (orthopedic, surgical, heart hospitals) that intentionally opt out of emergency care, which is typically a financial loss leader. Nearly every VA and children’s hospital in the file, by contrast, reports emergency services.


Geographic distribution

state_summary <- hospitals %>%
  count(State, sort = TRUE) %>%
  slice_max(n, n = 15)

ggplot(state_summary, aes(x = fct_reorder(State, n), y = n)) +
  geom_col(fill = "#31a354") +
  geom_text(aes(label = n), hjust = -0.3, size = 3.5) +
  coord_flip(clip = "off") +
  scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
  labs(title = "Top 15 states by hospital count", x = NULL, y = "Number of hospitals") +
  theme_minimal(base_size = 12)

Texas (376) and California (345) lead the country in raw hospital count, followed by a cluster of large and Midwestern states (New York, Florida, Illinois, Pennsylvania, Ohio). Texas’s total is notably inflated by its large number of small rural Critical Access and single-specialty proprietary hospitals rather than by population alone — a pattern worth flagging for anyone using this file to reason about access per capita, since this dataset contains no population denominator.

county_top <- hospitals %>%
  filter(!is.na(County)) %>%
  count(County, State, sort = TRUE) %>%
  slice_max(n, n = 10)

city_top <- hospitals %>%
  count(City, State, sort = TRUE) %>%
  slice_max(n, n = 10)

county_top %>%
  kable(col.names = c("County", "State", "Hospitals"), caption = "Top 10 counties by hospital count") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Top 10 counties by hospital count
County State Hospitals
LOS ANGELES CA 86
COOK IL 51
HARRIS TX 41
MARICOPA AZ 35
DALLAS TX 28
ORANGE CA 25
MIAMI-DADE FL 22
TARRANT TX 21
CUYAHOGA OH 19
OKLAHOMA OK 19
city_top %>%
  kable(col.names = c("City", "State", "Hospitals"), caption = "Top 10 cities by hospital count") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Top 10 cities by hospital count
City State Hospitals
CHICAGO IL 28
HOUSTON TX 25
LOS ANGELES CA 21
DALLAS TX 18
OKLAHOMA CITY OK 17
PHILADELPHIA PA 17
PHOENIX AZ 16
BALTIMORE MD 15
BROOKLYN NY 14
NEW YORK NY 13

Los Angeles County alone accounts for 86 hospitals — more than double the next-largest county (Cook County, IL, home to Chicago) — underscoring how much hospital-count statistics are driven by a small number of very large, dense metro counties rather than reflecting typical local access.


Explore the data

The table below is fully searchable and sortable for readers who want to look up a specific hospital, state, or ownership type.

hospitals %>%
  select(`Hospital Name`, City, State, County, `Hospital Type`, `Hospital Ownership`, `Emergency Services`) %>%
  datatable(
    options = list(pageLength = 10, scrollX = TRUE),
    rownames = FALSE,
    filter = "top"
  )

Key takeaways

  • Rural care is a major share of the system. Critical Access Hospitals represent about 1 in 4 facilities in the directory, showing how much of the U.S. hospital landscape is small, rural, and structurally distinct from the large urban medical center that dominates public perception.
  • Non-profit ownership is the norm, not for-profit. Nearly 6 in 10 hospitals are voluntary non-profits; for-profit, investor-owned hospitals are the minority (17%), though they are concentrated geographically and by facility type.
  • Emergency care is nearly universal, with one clear exception. Where emergency services are absent, for-profit specialty and surgical hospitals are heavily overrepresented relative to their overall share of the file.
  • Hospital counts cluster geographically. A small number of large states and metro counties (Los Angeles, Cook/Chicago) account for a disproportionate share of listed facilities — any per-capita or “access” claim built on this file needs a population denominator this dataset doesn’t include.
  • Data quality is strong. Structural fields (type, ownership, ER status) are essentially complete; the only meaningful gaps are county assignment for federal (VA) facilities and minor formatting inconsistencies in the ownership field, both handled in the setup step above.

Limitations

This file describes hospital structure, not performance. It contains no bed counts, no patient volumes, no quality or outcome measures, and no population data — so it cannot support claims about care quality, capacity, or per-capita access on its own. It would pair well with CMS Hospital Compare quality measures or Census population data for that next layer of analysis.


Report generated in R Markdown. To publish: open this file in RStudio, click Knit, then use the Publish button (blue icon, top right of the preview) to push directly to RPubs.