R/requestQ.R

Defines functions requestQ

Documented in requestQ

# Written by Regis A. Ely (regisaely@gmail.com)

# DON'T FORGET TO AUTHENTICATE WITH Quandl.api_key("yourkey") BEFORE
# RUNNING THIS FUNCTION. IF YOU DON'T HAVE A KEY, SIGN UP AT
# http://www.quandl.com TO GET ONE.

# This function takes as arguments a data.frame object generated by
# searchQ() function and the rows indicating the variables of interest,
# and then it requests the data for all countries selected. It returns a
# list of xts objects with one variable in each element and the
# countries as columns. It accepts all arguments of the Quandl()
# function and a specific list of countries such as: Europe, European
# Union, Euro Area, Eastern Europe, Western Europe, America, Latin
# America, North America, South America, Asia, Oceania, Africa, MENA,
# G20 and G7.

# OBS: the function might not work as expected if the dataset_code
# changes pattern across diferent countries. In this case you may want
# to edit the funtion to your particular needs.

requestQ <- function(searchQ, rows = 1, countries = "all", type = "xts",
                     order = "asc", collapse = "annual", ...) {
  data <- list()
  i <- 1
  country <- attributes(searchQ)$country
  frequency <- attributes(searchQ)$frequency

  # Begin loop for each series.
  for (row in rows) {

    # Check if database is premium.
    if (searchQ$premium[row]) {
      warning(paste("The database", searchQ$database_code[row], "is a premium database. An error migth occur if you do not have access to this database."))
    }
    
    # Search the series for all countries.
    database <- searchQ$database_code[row]
    pattern <- unlist(strsplit(searchQ$name[row], country))
    Qsearch <- searchQ(paste(pattern, collapse = ""),
                       database = database, frequency = frequency,
                       n = 300, view = FALSE)
    for (k in 1:length(pattern)) {
      Qsearch <- Qsearch[grep(pattern[k], Qsearch$name,
                              fixed = TRUE), ]
      }

    # Filter for selected countries
    if (any(countries != "all")) {
      if (any(countries == "Europe")) {
        europe <- c("Albania", "Andorra", "Armenia", "Austria", "Azerbaijan", "Belarus", "Belgium", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Cyprus", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Georgia", "Germany", "Greece", "Hungary", "Iceland", "Ireland", "Italy", "Kazakhstan", "Kosovo", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Portugal", "Romania", "Russia", "San Marino", "Serbia", "Slovakia", "Slovenia", "Spain", "Sweden", "Switzerland", "Turkey", "Ukraine", "United Kingdom", "Vatican City (Holy See)")
        countries <- c(countries[which(countries != "Europe")], europe)
      }
      if (any(countries == "European Union")) {
        eu <- c("Austria", "Belgium", "Bulgaria", "Croatia", "Cyprus", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Germany", "Greece", "Hungary", "Ireland", "Italy", "Latvia", "Lithuania", "Luxembourg", "Malta", "Netherlands", "Poland", "Portugal", "Romania", "Slovakia", "Slovenia", "Spain", "Sweden", "United Kingdom")
        countries <- c(countries[which(countries != "European Union")],
                       eu)
      }
      if (any(countries == "Euro Area")) {
        euro <- c("Belgium", "Germany", "Ireland", "Greece", "Spain", "France", "Italy", "Cyprus", "Luxembourg", "Malta", "Netherlands", "Austria", "Portugal", "Slovenia", "Slovakia", "Finland", "Estonia", "Latvia", "Lithuania")
        countries <- c(countries[which(countries != "Euro Area")], euro)
      }
      if (any(countries == "Eastern Europe")) {
        eastern <- c("Albania", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Estonia", "Hungary", "Latvia", "Lithuania", "Macedonia", "Moldova", "Poland", "Romania", "Russia", "Serbia and Montenegro", "Slovakia", "Slovenia", "Ukraine")
        countries <- c(countries[which(countries != "Eastern Europe")],
                       eastern)
      }
      if (any(countries == "Western Europe")) {
        western <- c("Andorra", "Austria", "Belgium", "Denmark", "Finland", "France", "Germany", "Gibraltar", "Greece", "Iceland", "Italy", "Ireland", "Liechtenstein", "Luxembourg", "Malta", "Monaco", "Norway", "Netherlands", "Portugal", "San Marino", "Spain", "Sweden", "Switzerland", "United Kingdom")
        countries <- c(countries[which(countries != "Western Europe")],
                       western)
      }
      if (any(countries == "America")) {
        america <- c("Antigua and Barbuda", "Argentina", "Bahamas", "Barbados", "Belize", "Bolivia", "Brazil", "Canada", "Chile", "Colombia", "Costa Rica", "Cuba", "Dominica", "Dominican Republic", "Ecuador", "El Salvador", "Grenada", "Guatemala", "Guyana", "Haiti", "Honduras", "Jamaica", "Mexico", "Nicaragua", "Panama", "Paraguay", "Peru", "Saint Kitts and Nevis", "Saint Lucia", "Saint Vincent and the Grenadines", "Suriname", "Trinidad and Tobago", "United States", "Uruguay", "Venezuela")
        countries <- c(countries[which(countries != "America")], america)
      }
      if (any(countries == "Latin America")) {
        latin <- c("Argentina", "Belize", "Bolivia", "Brazil", "Chile", "Colombia", "Costa Rica", "Ecuador", "El Salvador", "Guatemala", "Guyana", "Honduras", "Mexico", "Nicaragua", "Panama", "Paraguay", "Peru", "Suriname", "Uruguay", "Venezuela")
        countries <- c(countries[which(countries != "Latin America")],
                       latin)
      }
      if (any(countries == "North America")) {
        northamerica <- c("Antigua and Barbuda", "Bahamas", "Barbados", "Belize", "Canada", "Costa Rica", "Cuba", "Dominica", "Dominican Republic", "El Salvador", "Grenada", "Guatemala", "Haiti", "Honduras", "Jamaica", "Mexico", "Nicaragua", "Panama", "Saint Kitts and Nevis", "Saint Lucia", "Saint Vincent and The Grenadines", "Trinidad and Tobago", "United States")
        countries <- c(countries[which(countries != "North America")],
                       northamerica)
      }
      if (any(countries == "South America")) {
        southamerica <- c("Argentina", "Bolivia", "Brazil", "Chile", "Colombia", "Ecuador", "Guyana", "Paraguay", "Peru", "Suriname", "Uruguay", "Venezuela")
        countries <- c(countries[which(countries != "South America")],
                       southamerica)
      }
      if (any(countries == "Asia")) {
        asia <- c("Afghanistan", "Armenia", "Azerbaijan", "Bahrain", "Bangladesh", "Bhutan", "Brunei", "Cambodia", "China", "Cyprus", "Georgia", "India", "Indonesia", "Iran", "Iraq", "Israel", "Japan", "Jordan", "Kazakhstan", "Kuwait", "Kyrgyzstan", "Laos", "Lebanon", "Malaysia", "Maldives", "Mongolia", "Myanmar", "Nepal", "North Korea", "Oman", "Pakistan", "Palestine", "Philippines", "Qatar", "Russia", "Saudi Arabia", "Singapore", "South Korea", "Sri Lanka", "Syria", "Taiwan", "Tajikistan", "Thailand", "Timor-Leste", "Turkey", "Turkmenistan", "United Arab Emirates", "Uzbekistan", "Vietnam", "Yemen")
        countries <- c(countries[which(countries != "Asia")], asia)
      }
      if (any(countries == "Oceania")) {
        oceania <- c("Australia", "Fiji", "Kiribati", "Marshall Islands", "Micronesia", "Nauru", "New Zealand", "Palau", "Papua New Guinea", "Samoa", "Solomon Islands", "Tonga", "Tuvalu", "Vanuatu")
        countries <- c(countries[which(countries != "Oceania")], oceania)
      }
      if (any(countries == "Africa")) {
        africa <- c("Algeria", "Angola", "Benin", "Botswana", "Burkina Faso", "Burundi", "Cabo Verde", "Cameroon", "Central African Republic", "Chad", "Comoros", "Congo", "Cote d'Ivoire", "Djibouti", "Egypt", "Equatorial Guinea", "Eritrea", "Ethiopia", "Gabon", "Gambia", "Ghana", "Guinea", "Guinea-Bissau", "Kenya", "Lesotho", "Liberia", "Libya", "Madagascar", "Malawi", "Mali", "Mauritania", "Mauritius", "Morocco", "Mozambique", "Namibia", "Niger", "Nigeria", "Rwanda", "Sao Tome and Principe", "Senegal", "Seychelles", "Sierra Leone", "Somalia", "South Africa", "South Sudan", "Sudan", "Swaziland", "Tanzania", "Togo", "Tunisia", "Uganda", "Zambia", "Zimbabwe")
        countries <- c(countries[which(countries != "Africa")], africa)
      }
      if (any(countries == "MENA")) {
        mena <- c("Algeria", "Bahrain", "Djibouti", "Egypt", "Iran", "Iraq", "Israel", "Jordan", "Kuwait", "Lebanon", "Libya", "Morocco", "Palestine", "Oman", "Qatar", "Saudi Arabia", "Sudan", "Syria", "Tunisia", "Turkey", "United Arab Emirates", "Yemen")
        countries <- c(countries[which(countries != "MENA")], mena)
      }
      if (any(countries == "G20")) {
        g20 <- c("Argentina", "Australia", "Brazil", "Canada", "China", "France", "Germany", "India", "Indonesia", "Italy", "Japan", "Korea", "Mexico", "Russia", "Saudi Arabia", "South Africa", "Turkey", "United Kingdom", "United States")
        countries <- c(countries[which(countries != "G20")], g20)
      }
      if (any(countries == "G7")) {
        g7 <- c("Canada", "France", "Germany", "Italy", "Japan", "United Kingdom", "United States")
        countries <- c(countries[which(countries != "G7")], g7)
      }
      Qsearch <- Qsearch[grep(paste(countries, collapse = "|"),
                              Qsearch$name), ]
    }

    # Deal with data with missing values.
    missing <- grep("Missing Value", Qsearch$name)
    if (sum(missing) != 0) Qsearch <- Qsearch[-missing, ]

    # Load data.
    data[[i]] <- Quandl(paste(Qsearch$database_code,
                              Qsearch$dataset_code, sep = "/"),
                        type = type, order = order,
                        collapse = collapse, ...)

    # Rename columns.
    codes <- gsub("^.*?[.]", "", colnames(data[[i]]))
    codes <- strsplit(codes, "[.]|_| - ")
    elem <- which(codes[[1]] == setdiff(codes[[1]], codes[[2]]))
    codes <- lapply(codes, "[", elem)
    try(colnames(data[[i]]) <- codes, silent = TRUE)

    # Add metadata as attribute.
    attributes(data)$meta[[i]] <- Qsearch

    # Go for next variable.
    i <- i + 1
  }
  data
}
regisely/macrodata documentation built on May 27, 2019, 4:05 a.m.