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
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
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
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)
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)
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
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)
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()
