---
title: "Fetching Data from FRED"
author: "Christopher Mann"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Fetching Data from FRED}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

The `eFRED` package makes it easy to import any number of series from the FRED 
website into a single data.frame. 

First, you will need an API key. You can freely obtain one by following the instructions 
at https://fred.stlouisfed.org/docs/api/api_key.html. The API key is a 32 character, 
lower-cased string. Once you have registered for one, assign it to a variable or 
use the `set_fred_key` function.

```{r}
library(eFRED)
api_key <- "abcdefghijklmnopqrstuvwxyz123456"
set_fred_key(api_key)
```

Almost all of the `eFRED` functions require an API key. The `set_fred_key` function 
sets the default key that is used by the functions so that you do not need to directly 
pass the key each time the function is called.

```{r include=FALSE}
set_fred_key("04dc6777a721d81414a460093933e0ae")
```

FRED data can be extracted by using the `fred` function. The general format of the 
function is  `fred(name1 = "code1", name2 = "code2", ...)`, where `"code"` is the unique series
ID that can be found next to each series' title at https://fred.stlouisfed.org/, 
and `name` is the new label for the series in the resulting data.frame. If no `name`
is provided, then the code will be used. Any number of series can be used and 
each code can be a character vector containing with multiple entries.

The following searches for two series: "GDPC1" *(Real GDP)* and "UNRATE" *(unemployment rate)*.

```{r}
df <- fred(y = "GDPC1", "unrate", all=FALSE)
head(df)
```

The column containing the data for GDP is named `"y"`. Since no name was provided for `"UNRATE"`, 
the column name is the same as the series. Note that the codes are not case sensitive. The 
`fred` function automatically converts all codes to uppercase. The last argument, `all=FALSE`, 
is included because GDP and the unemployment rate have different frequencies *(quarterly vs annual)* 
and different starting periods. When `all=FALSE` is used, the data.frame forces each value to the 
shortest series; otherwise, the frequency would be monthly with many `NA` values for `y`.

The raw information about each series is contained within the data.frame's `info` attribute, 
unless `info=FALSE` is included.

```{r}
attr(df, "info")
```

The `eFRED` package contains a variety of other functions to interact with the 
FRED API. For example, the `fred_search` function can be used to search for various 
series. The example below searches for series based on the query `"unemployment"`. 
The `args` parameter is a list containing other search parameters. In this case, 
search is limited to only the top three results.

```{r}
search_results <- fred_search("unemployment", args = list(limit = 3))
search_results
```

To grab each of these series, we can use the command `fred(search_results$id, info=FALSE)`.
The information about each is not needed since we have it from the search results.

The `eFRED` package also contains functions to search across tags, categories, releases, 
and much more.
