Skip to content

Commit 47b0ec1

Browse files
committed
add ability to get code sets and fold into cansim cube list
1 parent 91c4697 commit 47b0ec1

11 files changed

Lines changed: 350 additions & 33 deletions

NAMESPACE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export(cansim_old_to_new)
66
export(categories_for_level)
77
export(get_cansim)
88
export(get_cansim_changed_tables)
9+
export(get_cansim_code_set)
910
export(get_cansim_column_categories)
1011
export(get_cansim_column_list)
1112
export(get_cansim_cube_metadata)

R/cansim_helpers.R

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,11 @@ short_prov.fr <- purrr::set_names(c(
175175
#' @export
176176
#' @param data code{cansim} package data frame with provincial level data
177177
#' @return a code{cansim} package data frame with additional factor GEO.abb that contains language-specific provincial abbreviations
178+
#'
179+
#' @examples
180+
#' df <- get_cansim("17-10-0005")
181+
#' df <- add_provincial_abbreviations(df)
182+
#'
178183
add_provincial_abbreviations <- function(data){
179184
cleaned_language <- ifelse("VALEUR" %in% names(data),"fra","eng")
180185
if (cleaned_language=="eng") {
@@ -187,3 +192,42 @@ add_provincial_abbreviations <- function(data){
187192
data <- data %>%
188193
mutate(GEO.abb=factor(as.character(short_prov[!!as.name(data_geography_column)]), levels=c("CAN","BC","AB","SK","MB","ON","QC","NB","PE","NS","NL","YT","NT","NU","NTNU")))
189194
}
195+
196+
197+
#' Get NDM code sets
198+
#'
199+
#' Useful to get a list of surveys or subjects and used internally
200+
#' @export
201+
#' @param code_set the code set to retrieve.
202+
#' @param refresh Default is \code{FALSE}, repeated calls during the same session will hit the cached data.
203+
#' To refresh the code list during a running R session set to \code{TRUE}
204+
#' @return a tibble with english and french labels for the given code set
205+
#'
206+
#' @examples
207+
#' get_cansim_code_set("survey")
208+
#'
209+
get_cansim_code_set <- function(code_set=c("scalar", "frequency", "symbol", "status", "uom", "survey", "subject", "wdsResponseStatus"),
210+
refresh=FALSE){
211+
code_sets <- c("scalar", "frequency", "symbol", "status", "uom", "survey", "subject", "wdsResponseStatus")
212+
if (length(code_set)!=1 | !(code_set %in% code_sets)) {
213+
stop(paste0("Invalid code set, code_set must be one of ",paste0(code_sets,collapse=", ")))
214+
}
215+
path=file.path(tempdir(),"cansim_code_sets.Rmd")
216+
if (refresh | !file.exists(path)) {
217+
url='https://www150.statcan.gc.ca/t1/wds/rest/getCodeSets'
218+
r<-get_with_timeout_retry(url)
219+
if (r$status_code==200) {
220+
content <- httr::content(r)
221+
saveRDS(content,path)
222+
} else {
223+
warning("Problem downloading code sets.")
224+
stop(httr::content(r))
225+
}
226+
} else {
227+
content <- readRDS(path)
228+
}
229+
m<-do.call(rbind, content$object[[code_set]])
230+
m[m=="NULL"] <- NA
231+
as_tibble(m) %>%
232+
mutate_all(unlist)
233+
}

R/cansim_tables_list.R

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,8 @@ list_cansim_cubes <- function(lite=FALSE,refresh=FALSE){
225225
purrr::map(dimensions[[1]],function(a)a$dimensionNameFr) %>% paste0(collapse=", "))
226226
})
227227
}
228+
surveys <- get_cansim_code_set("survey")
229+
subjects <- get_cansim_code_set("subject")
228230
data <- lapply(dd,function(d)d$value) %>%
229231
do.call(rbind,.) %>%
230232
as_tibble() %>%
@@ -233,27 +235,10 @@ list_cansim_cubes <- function(lite=FALSE,refresh=FALSE){
233235
mutate(archived=.data$archived==1) %>%
234236
mutate(cansim_table_number=cleaned_ndm_table_number(.data$productId)) %>%
235237
select(c("cansim_table_number","cubeTitleEn","cubeTitleFr"),
236-
setdiff(names(.),c("cansim_table_number","cubeTitleEn","cubeTitleFr")))
237-
# data <- content %>% purrr::map_df(function(l){
238-
# tibble::enframe(l) %>%
239-
# t() %>%
240-
# as_tibble() %>%
241-
# setNames(unlist((.)[1,])) %>%
242-
# slice(-1)
243-
# if ("dimensions" %in% names(data)) {
244-
# data <- data %>%
245-
# mutate(dimensionsEn=purrr::map(dimensions[[1]],function(a)a$dimensionNameEn) %>% paste0(collapse=", ")) %>%
246-
# mutate(dimensionsFR=purrr::map(dimensions[[1]],function(a)a$dimensionNameFr) %>% paste0(collapse=", ")) %>%
247-
# select(-dimensions)
248-
# }
249-
# data <- data %>%
250-
# mutate_if(is.list,function(d)unlist(d) %>% paste0(collapse=", "))
251-
# }) %>%
252-
# mutate_at(vars(ends_with("Date")),as.Date) %>%
253-
# mutate(archived=archived==1) %>%
254-
# mutate(cansim_table_number=cleaned_ndm_table_number(productId)) %>%
255-
# select(c("cansim_table_number","cubeTitleEn","cubeTitleFr"),
256-
# setdiff(names(.),c("cansim_table_number","cubeTitleEn","cubeTitleFr")))
238+
setdiff(names(.),c("cansim_table_number","cubeTitleEn","cubeTitleFr"))) %>%
239+
left_join(surveys,by="surveyCode") %>%
240+
left_join(subjects,by="subjectCode")
241+
257242
saveRDS(data,path)
258243
}
259244
} else {
@@ -270,7 +255,7 @@ list_cansim_cubes <- function(lite=FALSE,refresh=FALSE){
270255
#' @param search_term User-supplied search term used to find Statistics Canada data cubes with matching titles, table numbers, subject and survey codes.
271256
#' @param refresh Default is \code{FALSE}. The underlying cube list is cached for the duration of the R sessions and will regenerate the cube list if set to \code{TRUE}
272257
#'
273-
#' @return A tibble with available Statistics Canada data cubes, listing title, Statistics Canada data cube catalogue number, deprecated CANSIM table number, description and geography that match the search term.
258+
#' @return A tibble with available Statistics Canada data cubes, listing title, Statistics Canada data cube catalogue number, deprecated CANSIM table number, survey and subject.
274259
#'
275260
#' @examples
276261
#' search_cansim_cubes("Labour force")
@@ -280,6 +265,12 @@ search_cansim_cubes <- function(search_term, refresh=FALSE){
280265
list_cansim_cubes(refresh = refresh) %>%
281266
filter(grepl(search_term,.data$cubeTitleEn,ignore.case = TRUE) |
282267
grepl(search_term,.data$cubeTitleFr,ignore.case = TRUE) |
268+
grepl(search_term,.data$surveyEn,ignore.case = TRUE) |
269+
grepl(search_term,.data$surveyFr,ignore.case = TRUE) |
270+
grepl(search_term,.data$subjectEn,ignore.case = TRUE) |
271+
grepl(search_term,.data$subjectFr,ignore.case = TRUE) |
272+
grepl(search_term,.data$subjectCode,ignore.case = TRUE) |
273+
grepl(search_term,.data$surveyCode,ignore.case = TRUE) |
283274
grepl(search_term,.data$cansim_table_number,ignore.case = TRUE) |
284275
grepl(search_term,.data$productId,ignore.case = TRUE))
285276
}

docs/reference/add_provincial_abbreviations.html

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/get_cansim_code_set.html

Lines changed: 236 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/index.html

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)