WVASS Data Report

This document is a 2024 summary of the West Virginia Speleological Survey’s cave database using R.

Note: This report places the Simmons-Mingo Cave System in Randolph County, and places the Friars Hole Cave System in Pocahontas County. Duplicate length for Great Savannah Cave System has been excluded.

CAVES_FNAME    <- "wvass_caves_2024-08-13.csv"
FEATURES_FNAME <- "wvass_features_2024-08-13.csv"


caves <- read_csv(CAVES_FNAME) |>
  mutate(county=factor(county), region=factor(region)) |>
  mutate(length_mi=length_ft / 5280)

features <- read_csv(FEATURES_FNAME) |>
  mutate(county=factor(county), region=factor(region), feature_type=(factor(feature_type))) |>
  mutate(length_mi=length_ft / 5280)

Karst Features - Total: 5147

features |>
  group_by(feature_type) |>
  summarize(features = n()) |>
  kable(digits=2, caption="Karst Features")
Karst Features
feature_type features
Cave 3646
Cenote 4
Dig 28
Estavelle 2
FRO 967
Insurgence 80
Sandstone 21
Sinkhole 21
Spring 378

Karst Features By County

features |>
  group_by(county, feature_type) |>
  summarize(count = n()) |>
  pivot_wider(names_from = feature_type, values_from = count, values_fill = 0) |>
  arrange(desc(Cave)) |>
  kable(digits=2, caption="Karst Features By County")
Karst Features By County
county Cave FRO Spring Cenote Dig Estavelle Insurgence Sinkhole Sandstone
Greenbrier 1227 273 164 4 8 2 43 4 0
Pocahontas 558 75 5 0 0 0 1 4 1
Randolph 525 39 3 0 0 0 2 0 0
Monroe 302 77 50 0 6 0 15 10 0
Pendleton 301 190 60 0 11 0 3 1 0
Tucker 160 117 15 0 2 0 7 0 1
Berkeley 150 45 0 0 0 0 0 0 0
Mercer 105 74 26 0 1 0 7 2 4
Preston 72 34 3 0 0 0 0 0 1
Grant 66 17 19 0 0 0 0 0 0
Jefferson 57 3 0 0 0 0 0 0 0
Hardy 24 3 29 0 0 0 1 0 1
Monongalia 24 14 2 0 0 0 1 0 10
Ohio 17 0 0 0 0 0 0 0 0
Hampshire 15 0 0 0 0 0 0 0 0
Barbour 7 0 0 0 0 0 0 0 0
Summers 7 6 1 0 0 0 0 0 3
Mineral 6 0 0 0 0 0 0 0 0
Raleigh 5 0 0 0 0 0 0 0 0
Harrison 4 0 0 0 0 0 0 0 0
Marion 3 0 0 0 0 0 0 0 0
Nicholas 3 0 0 0 0 0 0 0 0
Wetzel 3 0 0 0 0 0 0 0 0
Morgan 2 0 0 0 0 0 0 0 0
Upshur 2 0 0 0 0 0 0 0 0
Kanawha 1 0 0 0 0 0 0 0 0
Webster 0 0 1 0 0 0 0 0 0

Total cave passage

caves |>
  summarize(
    total_length_mi = sum(length_mi, na.rm=TRUE),
    caves = n(),
    longest_mi = max(length_mi, na.rm=TRUE),
    deepest_ft = max(depth_ft, na.rm=TRUE)
  ) |>
  kable(digits=2, caption=paste0("Total Cave Passage In WV"))
Total Cave Passage In WV
total_length_mi caves longest_mi deepest_ft
758.44 3646 50 683

Longest caves in the state.

caves |> 
  arrange(desc(length_ft)) |> 
  select(name, wvass_id, county, region, length_mi, depth_ft) |>
  slice_head(n=20) |>
  kable(digits=2, caption="Longest Caves In WV (20)")
Longest Caves In WV (20)
name wvass_id county region length_mi depth_ft
Great Savannah Cave System GBR-0005 Greenbrier Big Levels North 50.00 504
Friars Hole Cave System POC-0001 Pocahontas Pocahontas County 45.50 618
Hellhole System PEN-0061 Pendleton Germany Valley 43.55 425
Organ Cave System GBR-0002 Greenbrier Organ Cave Plateau 38.45 486
Memorial Day Cave PEN-0255 Pendleton Germany Valley 29.06 568
Scott Hollow Cave MNR-0190 Monroe Scott Hollow Basin 27.00 571
The Hole System GBR-0003 Greenbrier Lower Spring Creek Basin 23.00 242
Culverson Creek Cave System GBR-0004 Greenbrier Culverson Creek Cave 20.93 300
Windy Mouth Cave GBR-0457 Greenbrier Windy Mouth Area 18.00 200
Benedicts Cave System GBR-0009 Greenbrier Big Levels South 14.85 177
Bone-Norman Cave System GBR-0007 Greenbrier Greenbrier River West 14.12 0
Boarhole-Portal Cave System GBR-1128 Greenbrier Upper Spring Creek Basin South 10.71 325
The Portal-Borehole System GBR-0585 Greenbrier Upper Spring Creek Basin South 10.69 325
Kimble Pit PEN-0279 Pendleton Germany Valley 9.21 427
Dry Cave GBR-0540 Greenbrier Anthony Creek Basin 8.34 214
Ludington Cave System GBR-0006 Greenbrier Big Levels North 8.30 250
Acme Quarry #5 Cave GBR-0456 Greenbrier ACME area 7.12 223
Cassell Cave System POC-0037 Pocahontas Back Allegheny Mountain 6.63 140
Bowden Cave System RAN-0059 Randolph Bowden 6.08 190
Carpenter-Swago Cave System POC-0338 Pocahontas Pocahontas County 5.50 239

Deepest caves in the state.

caves |>
  arrange(desc(depth_ft)) |>
  select(name, wvass_id, county, region, length_mi, depth_ft) |>
  slice_head(n=20) |>
  kable(digits=2, caption="Deepest Caves In WV (20)")
Deepest Caves In WV (20)
name wvass_id county region length_mi depth_ft
Simmons Mingo-My Cave System RAN-0300 Randolph Little Laurel Run 3.35 683
Friars Hole Cave System POC-0001 Pocahontas Pocahontas County 45.50 618
Overholts Blowing Cave System POC-0480 Pocahontas Pocahontas County 2.90 590
Scott Hollow Cave MNR-0190 Monroe Scott Hollow Basin 27.00 571
Memorial Day Cave PEN-0255 Pendleton Germany Valley 29.06 568
Great Savannah Cave System GBR-0005 Greenbrier Big Levels North 50.00 504
Wind Cave GRT-0025 Grant South Fork Mountain Complex 3.03 500
Turkey Roost Cave POC-0159 Pocahontas Stony Creek Valley 2.20 488
Organ Cave System GBR-0002 Greenbrier Organ Cave Plateau 38.45 486
Schoolhouse Cave PEN-0186 Pendleton Germany Valley 1.62 437
Shinaberry Cave POC-0115 Pocahontas Cloverlick Mountain to Edray 1.00 435
Kimble Pit PEN-0279 Pendleton Germany Valley 9.21 427
Scott Cave MNR-0189 Monroe Scott Hollow Basin 1.00 426
Hellhole System PEN-0061 Pendleton Germany Valley 43.55 425
Middle Earth GBR-0598 Greenbrier Raders Valley South 1.24 390
Sinnett-Thorn Mountain Cave System PEN-0212 Pendleton Upper South Branch Valley 2.33 386
Walt Allen Cave POC-0112 Pocahontas Cloverlick Mountain to Edray 0.29 385
Cave Mountain Cave PEN-0020 Pendleton Cave Mountain-Smoke Hole area 2.20 382
General Averell Pit POC-0407 Pocahontas Pocahontas County 0.44 360
Flower Pot RAN-0137 Randolph Little Laurel Run 3.69 352

Total cave passage per county.

caves |>
  group_by(county) |>
  summarize(length_mi = sum(length_mi, na.rm=TRUE), caves = n()) |>
  arrange(desc(length_mi)) |>
  kable(digits=2, caption="Total Cave Passage By County")
Total Cave Passage By County
county length_mi caves
Greenbrier 319.75 1227
Pendleton 124.83 301
Pocahontas 108.68 558
Monroe 97.64 302
Randolph 46.84 525
Tucker 22.33 160
Mercer 8.77 105
Preston 7.90 72
Grant 6.22 66
Berkeley 5.72 150
Hardy 3.36 24
Jefferson 3.00 57
Monongalia 1.43 24
Ohio 0.52 17
Summers 0.47 7
Mineral 0.41 6
Barbour 0.23 7
Hampshire 0.13 15
Upshur 0.05 2
Morgan 0.05 2
Raleigh 0.03 5
Harrison 0.03 4
Marion 0.02 3
Kanawha 0.02 1
Wetzel 0.01 3
Nicholas 0.01 3

Total cave passage per region

caves |>
  group_by(region) |>
  summarize(length_mi = sum(length_mi, na.rm=TRUE), caves = n()) |>
  arrange(desc(length_mi)) |>
  slice_head(n=25) |>
  kable(digits=2, caption="Total Cave Passage By Region (25)")
Total Cave Passage By Region (25)
region length_mi caves
Germany Valley 88.79 109
Pocahontas County 76.33 286
Big Levels North 65.58 124
Organ Cave Plateau 50.73 40
Scott Hollow Basin 34.78 43
Little Laurel Run 32.73 409
Big Levels South 32.51 164
Lower Spring Creek Basin 26.15 55
Upper Spring Creek Basin South 25.63 102
Culverson Creek Cave 20.93 1
Dickson Spring South 19.55 35
Windy Mouth Area 18.56 32
Greenbrier River West 17.43 61
Upper South Branch Valley 17.30 51
Back Allegheny Mountain 12.43 44
ACME area 10.20 25
Greenville Area 10.05 18
Gap Mills-Zenith Area 9.13 25
Anthony Creek Basin 8.47 13
Culverson Creek South 8.26 74
Buckeye Creek 7.85 88
Bowden 7.73 63
Culverson Creek North 6.55 64
Big Spring Fork Valley 6.37 51
Raders Valley South 6.14 22
## Cave length to depth.

# ggplot(
#   data = caves |>
#     filter(length_ft > 100, depth_ft > 0) |>
#     filter(!county %in% c("Barbour", "Morgan", "Ohio", "Summers")),
#   mapping = aes(x=length_ft, y=depth_ft)) +
#   geom_point(mapping=aes(color=county)) +
#   scale_x_log10(labels=scales::comma) +
#   geom_smooth(method="glm", se=FALSE) +
#   facet_grid(vars(county))

Maps

# Clean up bad spatial cave data
wv_lat_range <- c( 37.0,  40.0)
wv_lon_range <- c(-83.0, -77.0)
caves <- filter(caves, latitude >= wv_lat_range[1] & latitude <= wv_lat_range[2] & longitude >= wv_lon_range[1] & longitude <= wv_lon_range[2])

# Load/convert geospatial data
counties <- st_read("gis/counties_detailed.shp", quiet = TRUE) |>
  select(NAME, SQUARE_MIL)
caves_sf <- st_as_sf(caves, coords = c("longitude", "latitude"), crs = 4326) |>
  st_transform(st_crs(counties))

Number of Caves by County

# Perform a spatial join to aggregate the total length for each county
counties_aggregated <- counties |>
  mutate(n_caves = lengths(st_intersects(counties, caves_sf))) |>
  mutate(n_caves = replace_na(n_caves, 0)) |>
  mutate(caves_sqmi = n_caves / SQUARE_MIL)
#kable(counties_aggregated)

# Plot the counties with polygons colored by number of caves
ggplot() +
  geom_sf(
    data = counties_aggregated,
    aes(fill = ifelse(n_caves > 0, n_caves, NA))
  ) +
  scale_fill_continuous(name = "Caves") +
  labs(title = "Number of Caves by County") +
  theme_minimal()

Cave Density by County

# Plot the counties with polygons colored by cave density
ggplot() +
  geom_sf(
    data = counties_aggregated,
    aes(fill = ifelse(caves_sqmi > 0, caves_sqmi, NA))
  ) +
  scale_fill_continuous(name = "Caves/mi^2") +
  labs(title = "Number of Caves per Square Mile") +
  theme_minimal()

Total Cave Length by County

# Perform a spatial join to aggregate the total length for each county
counties_aggregated <- st_join(counties, caves_sf) |>
  group_by(NAME) |>
  summarize(total_length_mi = sum(length_ft, na.rm = TRUE) / 5280)

# Plot the counties with polygons colored by length
ggplot() +
  geom_sf(
    data = counties_aggregated,
    aes(fill = ifelse(total_length_mi > 0, total_length_mi, NA))
  ) +
  scale_fill_continuous(name = "Length (mi)") +
  labs(title = "Total Cave Length by County") +
  theme_minimal()