--- title: "Getting Started" date: "2026-06-16" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Getting Started} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ``` r library(dplyr) library(ggplot2) library(weathercan) ``` ## Stations `weathercan` includes the function `stations()` which returns a list of stations and their details (including `station_id`). ``` r head(stations()) ``` ``` ## # A tibble: 6 × 17 ## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval start end normals normals_1991_2020 normals_1981_2010 ## ## 1 AB DAYSLAND 1795 301AR54 NA 52.9 -112. 689. Etc/GMT+7 hour NA NA FALSE FALSE FALSE ## 2 AB DAYSLAND 1795 301AR54 NA 52.9 -112. 689. Etc/GMT+7 day 1908 1922 FALSE FALSE FALSE ## 3 AB DAYSLAND 1795 301AR54 NA 52.9 -112. 689. Etc/GMT+7 month 1908 1922 FALSE FALSE FALSE ## 4 AB EDMONTON CORONATION 1796 301BK03 NA 53.6 -114. 671. Etc/GMT+7 hour NA NA FALSE FALSE FALSE ## 5 AB EDMONTON CORONATION 1796 301BK03 NA 53.6 -114. 671. Etc/GMT+7 day 1978 1979 FALSE FALSE FALSE ## 6 AB EDMONTON CORONATION 1796 301BK03 NA 53.6 -114. 671. Etc/GMT+7 month 1978 1979 FALSE FALSE FALSE ## # ℹ 1 more variable: normals_1971_2000 ``` ``` r glimpse(stations()) ``` ``` ## Rows: 26,448 ## Columns: 17 ## $ prov "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", … ## $ station_name "DAYSLAND", "DAYSLAND", "DAYSLAND", "EDMONTON CORONATION", "EDMONTON CORONATION", "EDMONTON CORONATION", "FLEET", "FLEET", "FLEET", … ## $ station_id 1795, 1795, 1795, 1796, 1796, 1796, 1797, 1797, 1797, 1798, 1798, 1798, 1799, 1799, 1799, 1800, 1800, 1800, 1801, 1801, 1801, 1802, … ## $ climate_id "301AR54", "301AR54", "301AR54", "301BK03", "301BK03", "301BK03", "301B6L0", "301B6L0", "301B6L0", "301B8LR", "301B8LR", "301B8LR", … ## $ WMO_id NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, … ## $ TC_id NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, … ## $ lat 52.87, 52.87, 52.87, 53.57, 53.57, 53.57, 52.15, 52.15, 52.15, 53.20, 53.20, 53.20, 52.40, 52.40, 52.40, 54.08, 54.08, 54.08, 53.52,… ## $ lon -112.28, -112.28, -112.28, -113.57, -113.57, -113.57, -111.73, -111.73, -111.73, -110.15, -110.15, -110.15, -115.20, -115.20, -115.2… ## $ elev 688.8, 688.8, 688.8, 670.6, 670.6, 670.6, 838.2, 838.2, 838.2, 640.0, 640.0, 640.0, 1036.0, 1036.0, 1036.0, 585.2, 585.2, 585.2, 668… ## $ tz "Etc/GMT+7", "Etc/GMT+7", "Etc/GMT+7", "Etc/GMT+7", "Etc/GMT+7", "Etc/GMT+7", "Etc/GMT+7", "Etc/GMT+7", "Etc/GMT+7", "Etc/GMT+7", "E… ## $ interval hour, day, month, hour, day, month, hour, day, month, hour, day, month, hour, day, month, hour, day, month, hour, day, month, hour, … ## $ start NA, 1908, 1908, NA, 1978, 1978, NA, 1987, 1987, NA, 1987, 1987, NA, 1980, 1980, NA, 1980, 1980, NA, 1986, 1986, NA, 1987, 1987, NA, … ## $ end NA, 1922, 1922, NA, 1979, 1979, NA, 1990, 1990, NA, 1998, 1998, NA, 2009, 2007, NA, 1981, 1981, NA, 2019, 2007, NA, 1991, 1991, NA, … ## $ normals FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRU… ## $ normals_1991_2020 FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,… ## $ normals_1981_2010 FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRU… ## $ normals_1971_2000 FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,… ``` You can look through this data frame directly, or you can use the `stations_search` function: ``` r stations_search("Kamloops") ``` ``` ## # A tibble: 40 × 17 ## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval start end normals normals_1991_2020 normals_1981_2010 ## ## 1 BC KAMLOOPS 1274 1163779 NA 50.7 -120. 379. Etc/GMT+8 day 1878 1982 FALSE FALSE FALSE ## 2 BC KAMLOOPS 1274 1163779 NA 50.7 -120. 379. Etc/GMT+8 month 1878 1982 FALSE FALSE FALSE ## 3 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/GMT+8 hour 1953 2013 TRUE TRUE TRUE ## 4 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/GMT+8 day 1951 2013 TRUE TRUE TRUE ## 5 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/GMT+8 month 1951 2013 TRUE TRUE TRUE ## 6 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/GMT+8 hour 2013 2026 TRUE TRUE FALSE ## 7 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/GMT+8 day 2013 2026 TRUE TRUE FALSE ## 8 BC KAMLOOPS AFTON MINES 1276 1163790 NA 50.7 -120. 701 Etc/GMT+8 day 1977 1993 TRUE FALSE FALSE ## 9 BC KAMLOOPS AFTON MINES 1276 1163790 NA 50.7 -120. 701 Etc/GMT+8 month 1977 1993 TRUE FALSE FALSE ## 10 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/GMT+8 hour 2006 2026 TRUE TRUE FALSE ## # ℹ 30 more rows ## # ℹ 1 more variable: normals_1971_2000 ``` You can narrow down your search by specifying time intervals (options are "hour", "day", or "month"): ``` r stations_search("Kamloops", interval = "hour") ``` ``` ## # A tibble: 3 × 17 ## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval start end normals normals_1991_2020 normals_1981_2010 ## ## 1 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/GMT+8 hour 1953 2013 TRUE TRUE TRUE ## 2 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/GMT+8 hour 2013 2026 TRUE TRUE FALSE ## 3 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/GMT+8 hour 2006 2026 TRUE TRUE FALSE ## # ℹ 1 more variable: normals_1971_2000 ``` You can specify more than one interval: ``` r stations_search("Kamloops", interval = c("hour", "month")) ``` ``` ## # A tibble: 21 × 17 ## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval start end normals normals_1991_2020 normals_1981_2010 ## ## 1 BC KAMLOOPS 1274 1163779 NA 50.7 -120. 379. Etc/GMT+8 month 1878 1982 FALSE FALSE FALSE ## 2 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/GMT+8 hour 1953 2013 TRUE TRUE TRUE ## 3 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/GMT+8 month 1951 2013 TRUE TRUE TRUE ## 4 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/GMT+8 hour 2013 2026 TRUE TRUE FALSE ## 5 BC KAMLOOPS AFTON MINES 1276 1163790 NA 50.7 -120. 701 Etc/GMT+8 month 1977 1993 TRUE FALSE FALSE ## 6 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/GMT+8 hour 2006 2026 TRUE TRUE FALSE ## 7 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/GMT+8 month 2006 2006 TRUE TRUE FALSE ## 8 BC KAMLOOPS CDA 1277 1163810 NA 50.7 -120. 345 Etc/GMT+8 month 1949 1977 FALSE FALSE FALSE ## 9 BC KAMLOOPS CHERRY CREEK 1278 1163814 NA 50.7 -121. 556. Etc/GMT+8 month 1970 1974 FALSE FALSE FALSE ## 10 BC KAMLOOPS CHERRY CREEK 2 1279 1163815 NA 50.6 -121. 701 Etc/GMT+8 month 1974 1977 FALSE FALSE FALSE ## # ℹ 11 more rows ## # ℹ 1 more variable: normals_1971_2000 ``` You can also search by proximity. These results include a new column `distance` specifying the distance in km from the coordinates: ``` r stations_search( coords = c(50.667492, -120.329049), dist = 20, interval = "hour" ) ``` ``` ## # A tibble: 3 × 18 ## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval start end normals normals_1991_2020 normals_1981_2010 ## ## 1 BC KAMLOOPS A 1275 1163780 71887 YKA 50.7 -120. 345. Etc/GMT+8 hour 1953 2013 TRUE TRUE TRUE ## 2 BC KAMLOOPS AUT 42203 1163842 71741 ZKA 50.7 -120. 345 Etc/GMT+8 hour 2006 2026 TRUE TRUE FALSE ## 3 BC KAMLOOPS A 51423 1163781 71887 YKA 50.7 -120. 345. Etc/GMT+8 hour 2013 2026 TRUE TRUE FALSE ## # ℹ 2 more variables: normals_1971_2000 , distance ``` We can also perform more complex searches using `filter()` function from the `dplyr` package direction on the data returned by stations(): ``` r 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 × 17 ## prov station_name station_id climate_id WMO_id TC_id lat lon elev tz interval start end normals normals_1991_2020 normals_1981_2010 ## ## 1 BC CRESTON CAMPBELL SCIENTIFIC 6838 114B1F0 71770 WJR 49.1 -116. 641. Etc/G… hour 1994 2026 TRUE TRUE FALSE ## 2 BC NELSON CS 6839 1145M29 71776 WNM 49.5 -117. 535. Etc/G… hour 1994 2026 TRUE TRUE FALSE ## 3 BC WARFIELD RCS 31067 1148705 71401 XWF 49.1 -118. 567. Etc/G… hour 2001 2026 TRUE TRUE FALSE ## # ℹ 1 more variable: normals_1971_2000 ``` ``` r ## 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 ``` You can update this list of stations with ``` r stations_dl() ``` And check when it was last updated with ``` r stations_meta() ``` ``` ## # A tibble: 1 × 2 ## ECCC_modified weathercan_modified ## ## 1 2026-06-03 23:30:00 2026-06-16 ``` ## Weather Once you have your `station_id`(s) you can download weather data: ``` r kam <- weather_dl(station_ids = 51423, start = "2016-01-01", end = "2016-02-15") ``` ``` ## As of weathercan v0.3.0 time display is either local time or UTC See Details under ]8;;x-r-help:weather_dl`weather_dl()`]8;; for more information. This message ## is shown once per session ``` ``` r kam ``` ``` ## # A tibble: 1,104 × 38 ## station_name station_id station_operator prov lat lon elev climate_id WMO_id TC_id date time year month day hour qual temp ##