Value by each year

Hi everybody,

I am looking for help. I have the data like that and I would like to put each value by year in "business_freedom" file into "stocks" file.
I have more than 300 stock ticker and nine variables such as "business_freedom".
Thank you in advance.

stocks<-data.frame(
               year = c(2016L, 2017L, 2018L, 2009L, 2010L, 2011L, 2012L, 2013L,
                        2014L, 2015L, 2016L, 2017L, 2018L, 2009L, 2010L, 2011L,
                        2012L, 2013L, 2014L, 2015L),
   business_freedom = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
                        NA, NA, NA, NA, NA, NA),
             ticker = as.factor(c("AAA", "AAA", "AAA", "AAM", "AAM", "AAM",
                                  "AAM", "AAM", "AAM", "AAM", "AAM", "AAM",
                                  "AAM", "ABT", "ABT", "ABT", "ABT", "ABT", "ABT",
                                  "ABT"))
)

business_freedom <- data.frame(
               year = c(2018L, 2017L, 2016L, 2015L, 2014L, 2013L, 2012L, 2011L,
                        2010L, 2009L),
   business_freedom = c(63.2, 61.2, 58.3, 61.5, 62, 63.8, 61.1, 61.6, 60.7, 60)
)

Notes:

  1. data.frame converts strings to factors by default. You don't need to do that.
  2. Empty business_freedom column in stocks dataset is unnecessary. Remove it.
  3. In this case, specifying by argument is not required. But I used it to be specific.
  4. You can also use join family of functions provided in the dplyr package.

Then, you can do this:

stocks <- data.frame(year = c(2016L, 2017L, 2018L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L),
                     ticker = c("AAA", "AAA", "AAA", "AAM", "AAM", "AAM", "AAM", "AAM", "AAM", "AAM", "AAM", "AAM", "AAM", "ABT", "ABT", "ABT", "ABT", "ABT", "ABT", "ABT"))

business_freedom <- data.frame(year = c(2018L, 2017L, 2016L, 2015L, 2014L, 2013L, 2012L, 2011L, 2010L, 2009L),
                               business_freedom = c(63.2, 61.2, 58.3, 61.5, 62, 63.8, 61.1, 61.6, 60.7, 60))

merge(x = stocks, y = business_freedom, by = "year")

Hope this helps.

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.