library(tidyverse)
## ── Attaching packages ──────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.0       ✔ purrr   0.3.0  
## ✔ tibble  2.0.1       ✔ dplyr   0.8.0.1
## ✔ tidyr   0.8.2       ✔ stringr 1.4.0  
## ✔ readr   1.3.1       ✔ forcats 0.4.0
## ── Conflicts ─────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(stringr)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
## 
##     date
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(knitr)

Overview

This markdown merges the corrected (of 102 x 5 data frame of FOMC statements) with the classification data. We assume the fomc_data.rds and the raw classification file is located in the working directory.

d4<-readRDS(file = "fomc_data.rds")
dim(d4)
## [1] 102   5
str(d4)
## 'data.frame':    102 obs. of  5 variables:
##  $ year             : chr  "2007" "2007" "2007" "2007" ...
##  $ statement.dates  : chr  "20070131" "20070321" "20070509" "20070628" ...
##  $ links            : chr  "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070131a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070321a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070509a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070618a.htm" ...
##  $ statement.content: chr  "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ ...
##  $ statement.length : int  181 167 168 179 207 130 260 304 281 255 ...

Raw Classification File

We explicitly override the Date column to be imported as string because we will join these two dataframes on this data.

classificationFile = "Classification_FOMC_Statements.csv"

cls = read_csv(classificationFile , col_types = cols( Date = col_character() ) )

cls %>% rename( Economic.Growth = "Economic Growth", Employment.Growth = "Employment Growth", Medium.Term.Rate = "Medium Term Rate", Policy.Rate = "Policy Rate") -> cls

str(cls)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 102 obs. of  8 variables:
##  $ Index            : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Date2            : chr  "1/31/07" "3/21/07" "5/9/07" "6/28/07" ...
##  $ Date             : chr  "20070131" "20070321" "20070509" "20070628" ...
##  $ Economic.Growth  : chr  "Up" "Flat" "Down" "Up" ...
##  $ Employment.Growth: chr  "Flat" "Flat" "Flat" "Flat" ...
##  $ Inflation        : chr  "Down" "Up" "Up" "Down" ...
##  $ Medium.Term.Rate : chr  "Hawk" "Hawk" "Hawk" "Hawk" ...
##  $ Policy.Rate      : chr  "Flat" "Flat" "Flat" "Flat" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Index = col_double(),
##   ..   Date2 = col_character(),
##   ..   Date = col_character(),
##   ..   `Economic Growth` = col_character(),
##   ..   `Employment Growth` = col_character(),
##   ..   Inflation = col_character(),
##   ..   `Medium Term Rate` = col_character(),
##   ..   `Policy Rate` = col_character()
##   .. )

Merging FOMC data and Classification Data

d4 %>% inner_join( cls , by = c("statement.dates" = "Date")) %>%
  mutate( date_mdy = mdy(Date2)) %>%
  select(Index, 
         year ,
         statement.dates, 
         links, 
         statement.content, 
         statement.length ,
         date_mdy,
         Economic.Growth,
         Employment.Growth,
         Inflation,
         Medium.Term.Rate,
         Policy.Rate ) -> mgData


str(mgData)
## 'data.frame':    102 obs. of  12 variables:
##  $ Index            : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ year             : chr  "2007" "2007" "2007" "2007" ...
##  $ statement.dates  : chr  "20070131" "20070321" "20070509" "20070628" ...
##  $ links            : chr  "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070131a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070321a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070509a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070618a.htm" ...
##  $ statement.content: chr  "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ ...
##  $ statement.length : int  181 167 168 179 207 130 260 304 281 255 ...
##  $ date_mdy         : Date, format: "2007-01-31" "2007-03-21" ...
##  $ Economic.Growth  : chr  "Up" "Flat" "Down" "Up" ...
##  $ Employment.Growth: chr  "Flat" "Flat" "Flat" "Flat" ...
##  $ Inflation        : chr  "Down" "Up" "Up" "Down" ...
##  $ Medium.Term.Rate : chr  "Hawk" "Hawk" "Hawk" "Hawk" ...
##  $ Policy.Rate      : chr  "Flat" "Flat" "Flat" "Flat" ...

Let us view the sample data from the statements

mgData %>% select( Index, date_mdy, Economic.Growth, Employment.Growth, Inflation, Medium.Term.Rate, Policy.Rate) %>% kable() %>% kable_styling(bootstrap_options = c("hover", "striped")) %>%
scroll_box(width = "90%", height = "300px")
Index date_mdy Economic.Growth Employment.Growth Inflation Medium.Term.Rate Policy.Rate
1 2007-01-31 Up Flat Down Hawk Flat
2 2007-03-21 Flat Flat Up Hawk Flat
3 2007-05-09 Down Flat Up Hawk Flat
4 2007-06-28 Up Flat Down Hawk Flat
5 2007-08-07 Up Flat Flat Hawk Flat
6 2007-08-17 Down Flat Flat Dove Flat
7 2007-09-18 Flat Flat Down Dove Lower
8 2007-10-31 Up Flat Down Dove Lower
9 2007-12-11 Down Flat Down Dove Lower
10 2008-01-22 Down Down Flat Dove Lower
11 2008-01-30 Down Down Flat Dove Lower
12 2008-03-18 Down Down Up Dove Lower
13 2008-04-30 Down Down Up Dove Lower
14 2008-06-25 Up Down Up Hawk Flat
15 2008-08-05 Up Down Up Hawk Flat
16 2008-09-16 Down Down Up Dove Flat
17 2008-10-08 Down Flat Down Dove Lower
18 2008-10-29 Down Flat Down Dove Lower
19 2008-12-16 Down Down Down Dove Lower
20 2009-01-28 Down Down Down Dove Flat
21 2009-03-18 Down Down Down Dove Flat
22 2009-04-29 Down Down Flat Dove Flat
23 2009-06-24 Down Down Down Dove Flat
24 2009-08-12 Flat Down Down Dove Flat
25 2009-09-23 Up Down Down Dove Flat
26 2009-11-04 Up Down Down Dove Flat
27 2009-12-16 Up Flat Down Dove Flat
28 2010-01-27 Flat Flat Down Dove Flat
29 2010-03-16 Flat Flat Down Dove Flat
30 2010-04-28 Flat Flat Flat Dove Flat
31 2010-06-23 Flat Up Down Dove Flat
32 2010-08-10 Down Down Down Dove Flat
33 2010-09-21 Down Down Flat Dove Flat
34 2010-11-03 Flat Flat Down Dove Flat
35 2010-12-14 Flat Down Down Dove Flat
36 2011-01-26 Flat Down Down Dove Flat
37 2011-03-15 Up Flat Up Dove Flat
38 2011-04-27 Up Flat Up Dove Flat
39 2011-06-22 Flat Down Up Dove Flat
40 2011-08-09 Flat Down Down Dove Flat
41 2011-09-21 Flat Down Down Dove Flat
42 2011-11-02 Up Down Flat Dove Flat
43 2011-12-13 Up Flat Down Dove Flat
44 2012-01-25 Up Up Flat Dove Flat
45 2012-03-13 Up Up Flat Dove Flat
46 2012-04-25 Up Up Up Dove Flat
47 2012-06-20 Up Flat Down Dove Flat
48 2012-08-01 Down Flat Down Dove Flat
49 2012-09-13 Up Flat Flat Dove Flat
50 2012-10-24 Up Flat Up Dove Flat
51 2012-12-12 Up Up Flat Dove Flat
52 2013-01-30 Flat Up Flat Dove Flat
53 2013-03-20 Up Up Flat Dove Flat
54 2013-05-01 Up Up Flat Dove Flat
55 2013-06-19 Up Up Down Dove Flat
56 2013-07-31 Up Up Flat Dove Flat
57 2013-09-18 Up Up Flat Dove Flat
58 2013-10-30 Up Up Flat Dove Flat
59 2013-12-18 Up Up Flat Dove Flat
60 2014-01-29 Up Up Flat Dove Flat
61 2014-03-19 Down Up Flat Dove Flat
62 2014-04-30 Up Up Flat Dove Flat
63 2014-06-18 Up Up Flat Dove Flat
64 2014-07-30 Up Up Up Dove Flat
65 2014-09-17 Up Up Flat Dove Flat
66 2014-10-29 Up Up Down Dove Flat
67 2014-12-17 Up Up Down Dove Flat
68 2015-01-28 Up Up Down Dove Flat
69 2015-03-18 Flat Up Down Dove Flat
70 2015-04-29 Down Flat Flat Dove Flat
71 2015-06-17 Up Up Flat Dove Flat
72 2015-07-29 Up Up Flat Dove Flat
73 2015-09-17 Up Up Down Dove Flat
74 2015-10-28 Up Flat Down Dove Flat
75 2015-12-16 Up Up Flat Dove Raise
76 2016-01-27 Down Up Down Dove Flat
77 2016-03-16 Up Up Up Dove Flat
78 2016-04-27 Down Up Flat Dove Flat
79 2016-06-15 Up Flat Down Dove Flat
80 2016-07-27 Up Up Flat Dove Flat
81 2016-09-21 Up Up Flat Dove Flat
82 2016-11-02 Flat Up Flat Dove Flat
83 2016-12-14 Up Up Up Dove Raise
84 2017-02-01 Up Up Up Dove Flat
85 2017-03-15 Up Up Flat Hawk Raise
86 2017-05-03 Down Up Down Hawk Flat
87 2017-06-14 Up Up Down Hawk Raise
88 2017-07-26 Up Up Down Hawk Flat
89 2017-09-20 Up Up Down Hawk Flat
90 2017-11-01 Up Up Down Hawk Flat
91 2017-12-13 Up Up Down Hawk Raise
92 2018-01-31 Up Up Flat Hawk Flat
93 2018-03-21 Up Up Up Hawk Raise
94 2018-05-02 Up Up Flat Hawk Flat
95 2018-06-13 Up Up Flat Hawk Raise
96 2018-08-01 Up Up Flat Hawk Flat
97 2018-09-26 Up Up Flat Hawk Raise
98 2018-11-08 Up Up Flat Hawk Flat
99 2018-12-19 Up Up Flat Hawk Raise
100 2019-01-30 Up Up Down Dove Flat
101 2019-03-20 Flat Flat Down Dove Flat
102 2019-05-01 Up Up Flat Dove Flat

Exporting the Merged Data Frame

We export the merged dataframe as a single RDS object for research use.

rds_filename = "fomc_merged_data_v2.rds"

saveRDS(mgData, file = rds_filename)

Let us also validate its contents.

mgData_validated = readRDS(rds_filename)

str(mgData_validated)
## 'data.frame':    102 obs. of  12 variables:
##  $ Index            : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ year             : chr  "2007" "2007" "2007" "2007" ...
##  $ statement.dates  : chr  "20070131" "20070321" "20070509" "20070628" ...
##  $ links            : chr  "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070131a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070321a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070509a.htm" "https://www.federalreserve.gov/newsevents/pressreleases/monetary20070618a.htm" ...
##  $ statement.content: chr  "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ "The Federal Open Market Committee decided today to keep its target for the federal funds rate at 5-1/4 percent."| __truncated__ ...
##  $ statement.length : int  181 167 168 179 207 130 260 304 281 255 ...
##  $ date_mdy         : Date, format: "2007-01-31" "2007-03-21" ...
##  $ Economic.Growth  : chr  "Up" "Flat" "Down" "Up" ...
##  $ Employment.Growth: chr  "Flat" "Flat" "Flat" "Flat" ...
##  $ Inflation        : chr  "Down" "Up" "Up" "Down" ...
##  $ Medium.Term.Rate : chr  "Hawk" "Hawk" "Hawk" "Hawk" ...
##  $ Policy.Rate      : chr  "Flat" "Flat" "Flat" "Flat" ...