weathercan
includes a data frame called stations
which lists available stations and their details (including station_id
.
## # A tibble: 6 x 14
## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval
## <chr> <chr> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 AB DAYSLAND 1795 301AR54 NA <NA> 52.9 -112. 689. Etc/… day
## 2 AB DAYSLAND 1795 301AR54 NA <NA> 52.9 -112. 689. Etc/… hour
## 3 AB DAYSLAND 1795 301AR54 NA <NA> 52.9 -112. 689. Etc/… month
## 4 AB EDMONTON CO… 1796 301BK03 NA <NA> 53.6 -114. 671. Etc/… day
## 5 AB EDMONTON CO… 1796 301BK03 NA <NA> 53.6 -114. 671. Etc/… hour
## 6 AB EDMONTON CO… 1796 301BK03 NA <NA> 53.6 -114. 671. Etc/… month
## # … with 3 more variables
You can look through this data frame directly, or you can use the stations_search
function:
## # A tibble: 40 x 14
## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval
## <chr> <chr> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 BC KAMLOOPS 1274 1163779 NA <NA> 50.7 -120. 379. Etc/… day
## 2 BC KAMLOOPS 1274 1163779 NA <NA> 50.7 -120. 379. Etc/… month
## 3 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/… day
## 4 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/… hour
## 5 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/… month
## 6 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/… day
## 7 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/… hour
## 8 BC KAMLOOPS AF… 1276 1163790 NA <NA> 50.7 -120. 701 Etc/… day
## 9 BC KAMLOOPS AF… 1276 1163790 NA <NA> 50.7 -120. 701 Etc/… month
## 10 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/… day
## # … with 30 more rows, and 3 more variables
You can narrow down your search by specifying time intervals (options are “hour”, “day”, or “month”):
## # A tibble: 3 x 14
## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval
## <chr> <chr> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/… hour
## 2 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/… hour
## 3 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/… hour
## # … with 3 more variables
You can specify more than one interval:
## # A tibble: 21 x 14
## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval
## <chr> <chr> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 BC KAMLOOPS 1274 1163779 NA <NA> 50.7 -120. 379. Etc/… month
## 2 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/… hour
## 3 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/… month
## 4 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/… hour
## 5 BC KAMLOOPS AF… 1276 1163790 NA <NA> 50.7 -120. 701 Etc/… month
## 6 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/… hour
## 7 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/… month
## 8 BC KAMLOOPS CDA 1277 1163810 NA <NA> 50.7 -120. 345 Etc/… month
## 9 BC KAMLOOPS CH… 1278 1163814 NA <NA> 50.7 -121. 556. Etc/… month
## 10 BC KAMLOOPS CH… 1279 1163815 NA <NA> 50.6 -121. 701 Etc/… month
## # … with 11 more rows, and 3 more variables
You can also search by proximity. These results include a new column distance
specifying the distance in km from the coordinates:
## # A tibble: 3 x 15
## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval
## <chr> <chr> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/… hour
## 2 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/… hour
## 3 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/… hour
## # … with 4 more variables
We can also perform more complex searches using filter()
function from the dplyr
package:
BCstations <- stations %>%
filter(prov %in% c("BC")) %>%
filter(interval == "hour") %>%
filter(lat > 49 & lat < 49.5) %>%
filter(lon > -119 & lon < -116) %>%
filter(start <= 2002) %>%
filter(end >= 2016)
BCstations
## # A tibble: 3 x 14
## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval
## <chr> <chr> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 BC CRESTON CAM… 6838 114B1F0 71770 WJR 49.1 -116. 641. Etc/… hour
## 2 BC NELSON CS 6839 1145M29 71776 WNM 49.5 -117. 535. Etc/… hour
## 3 BC WARFIELD RCS 31067 1148705 71401 XWF 49.1 -118. 567. Etc/… hour
## # … with 3 more variables
## weather_dl() accepts numbers so we can create a vector to input into weather:
stn_vector <- BCstations$station_id
stn_vector
## [1] 6838 6839 31067
Searching a bleeding edge updated list of stations:
Once you have your station_id
(s) you can download weather data:
## As of weathercan v0.3.0 time display is either local time or UTC
## See Details under ?weather_dl for more information.
## This message is shown once per session
## # A tibble: 1,104 x 35
## station_name station_id station_operator prov lat lon elev climate_id WMO_id
## <chr> <dbl> <lgl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 2 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 3 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 4 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 5 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 6 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 7 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 8 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 9 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## 10 KAMLOOPS A 51423 NA BC 50.7 -120. 345. 1163781 71887
## # … with 1,094 more rows, and 26 more variables
You can also download data from multiple stations at once:
kam.pg <- weather_dl(station_ids = c(48248, 51423), start = "2016-01-01", end = "2016-02-15")
kam.pg
## # A tibble: 2,208 x 35
## station_name station_id station_operator prov lat lon elev climate_id WMO_id
## <chr> <dbl> <lgl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 2 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 3 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 4 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 5 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 6 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 7 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 8 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 9 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## 10 PRINCE GEOR… 48248 NA BC 53.9 -123. 680 1096453 71302
## # … with 2,198 more rows, and 26 more variables
And plot it:
ggplot(data = kam.pg, aes(x = time, y = temp, group = station_name, colour = station_name)) +
theme(legend.position = "top") +
geom_line() +
theme_minimal()
Or you can use the vector created above:
stn_vec_df <- weather_dl(station_ids = stn_vector, start = "2016-01-01", end = "2016-02-15")
stn_vec_df
## # A tibble: 3,312 x 35
## station_name station_id station_operator prov lat lon elev climate_id WMO_id
## <chr> <dbl> <lgl> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 2 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 3 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 4 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 5 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 6 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 7 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 8 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 9 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## 10 CRESTON CAM… 6838 NA BC 49.1 -116. 641. 114B1F0 71770
## # … with 3,302 more rows, and 26 more variables
For more information on the data flags, see the Flags vignette, for more information on units and terms, see the Terms and Units vignette.