All of the buoys hosted by the NDBC (and available on ERDDAP) can be quickly viewed from the bundled data set buoy_data which along with the buoys ID, NAME, LAT and LON contain other metadata such as the years of operation, the date/time of the last recorded measurement, and the owners of the buoy
buoydata::buoy_data |>
dplyr::as_tibble()
#> # A tibble: 1,326 × 17
#> ID Y1 YN nYEARS lastMeasurement LAT LON STATION_LOC TTYPE
#> <chr> <dbl> <dbl> <int> <dttm> <dbl> <dbl> <chr> <chr>
#> 1 0Y2W3 2012 2015 4 2015-08-18 11:40:00 44.8 -87.3 "Sturgeon B… Weat…
#> 2 18CI3 2014 2015 2 2015-09-21 13:25:00 41.7 -86.9 "Michigan C… Weat…
#> 3 20CM4 2014 2015 2 2015-09-20 16:55:00 42.1 -86.5 "St. Joseph… Weat…
#> 4 23020 2008 2010 3 2010-12-18 11:50:00 22.2 38.5 "Red Sea" Buoy
#> 5 31201 2005 2005 1 2005-08-19 15:00:00 -27.7 -48.1 "Floripa, B… Wave…
#> 6 32012 2007 2018 12 2018-04-09 11:50:00 -19.6 -85.4 "Woods Hole… 2.4-…
#> 7 32301 1984 1986 3 1986-07-12 16:00:00 -9.9 -105. "" 3-me…
#> 8 32302 1986 1995 10 1995-04-03 12:00:00 -18 -85.1 "" 3-me…
#> 9 32487 2008 2010 3 2010-01-08 20:25:00 3.52 -77.7 "Buenaventu… Offs…
#> 10 32488 2008 2009 2 2009-10-16 02:10:00 6.26 -77.5 "Bahia Sola… Offs…
#> # ℹ 1,316 more rows
#> # ℹ 8 more variables: TIMEZONE <chr>, OWNER <chr>, OWNERNAME <chr>,
#> # COUNTRY <chr>, HULL <chr>, PAYLOAD <chr>, FORECAST <chr>, NOTE <chr>This data frame can be used to filter out stations of interest
Variables
Each buoy measures a different set of variables. A list of the
possible variables can be found using the get_variables()
function
buoydata::get_variables()#> variable_name data_type actual_range description
#> 1 apd float 0.0, 95.0 Wave Period, Average
#> 2 atmp float -153.4, 50.0 Air Temperature
#> 3 bar float 800.7, 1198.8 Air Pressure
#> 4 dewp float -99.9, 48.7 Dewpoint Temperature
#> 5 dpd float 0.0, 64.0 Wave Period, Dominant
#> 6 gst float 0.0, 75.5 Wind Gust Speed
#> 7 latitude float -55.0, 71.758 Latitude
#> 8 longitude float -177.75, 179.001 Longitude
#> 9 mwd short 0, 359 Wave Direction
#> 10 ptdy float -15.0, 14.7 Pressure Tendency
#> 11 station String Station Identifier
#> 12 tide float -9.37, 6.15 Water Level
#> 13 time double 4910400.0, 1.7617581E9 Time
#> 14 vis float 0.0, 66.7 Station Visibility
#> 15 wd short 0, 359 Wind Direction
#> 16 wspd float 0.0, 96.0 Wind Speed
#> 17 wspu float -98.7, 97.5 Wind Speed, Zonal
#> 18 wspv float -98.7, 97.5 Wind Speed, Meridional
#> 19 wtmp float -98.7, 50.0 SST
#> 20 wvht float 0.0, 92.39 Wave Height
Example
Find all buoys located between latitude [41,43] and longitude [-71,-67] with a time series of at least 20 years. Then pull and process data from a single buoy.
buoydata::buoy_data |>
dplyr::filter(LAT > 41,LAT < 43) |>
dplyr::filter(LON > -71, LON < -69) |>
dplyr::filter(nYEARS >= 20)
#> # A tibble: 6 × 17
#> ID Y1 YN nYEARS lastMeasurement LAT LON STATION_LOC TTYPE
#> <chr> <dbl> <dbl> <int> <dttm> <dbl> <dbl> <chr> <chr>
#> 1 44013 1984 2025 42 2025-11-21 19:00:00 42.3 -70.7 BOSTON 16 NM E… 2.1-…
#> 2 44018 2002 2024 21 2024-08-30 18:10:00 41.3 -69.3 CAPE COD - 9 N… 3-me…
#> 3 44029 2004 2025 20 2025-11-21 17:30:00 42.5 -70.6 Buoy A01 - Mas… Moor…
#> 4 BZBM3 2004 2025 22 2025-11-21 19:00:00 41.5 -70.7 8447930 - Wood… Wate…
#> 5 IOSN3 1984 2025 42 2025-09-14 03:00:00 43.0 -70.6 Isle of Shoals… C-MA…
#> 6 NTKM3 2005 2025 21 2025-11-21 19:30:00 41.3 -70.1 8449130 - Nant… Wate…
#> # ℹ 8 more variables: TIMEZONE <chr>, OWNER <chr>, OWNERNAME <chr>,
#> # COUNTRY <chr>, HULL <chr>, PAYLOAD <chr>, FORECAST <chr>, NOTE <chr>Lets pull the sea surface temperature (variable name, wtmp) from buoy 44018 - CAPE COD - 9 NM North of Provincetown, MA
buoy_44018 <- buoydata::get_buoy_data(buoyid="44018", var = "wtmp")Then plot the data
p <- ggplot2::ggplot(buoy_44018) +
ggplot2::geom_line(ggplot2::aes(x=time,y=wtmp)) +
ggplot2::ylab("Sea Surface Temp (Celcius)") +
ggplot2::xlab("")
print(p)
