Общая цель: Создать переменную в фрейме данных ежедневных цен на акции, которая будет указывать, сколько дней прошло с тех пор, как фирма представила прибыль. Это должно быть сделано путем поиска даты в другом фрейме данных.
У меня есть два фрейма данных: один, содержащий ежедневные цены акций ( df1 ), и другой, содержащий квартальные наблюдения с отчетными доходами от фирма ( df2 ). В df1 я стремлюсь создать новую переменную, которая будет указывать дни от объявленной прибыли, т.е. сообщается, что дневной заработок - это день 0, а следующий день - 1 и c. пока он не достигнет следующей отчетной даты, где он должен начинаться с 0.
Как сопоставить дату цены акций в df1 с ближайшей датой сообщаемой прибыли в df2 и присвоить ее переменной в df1 ? У меня есть несколько фирм в моем наборе данных.
Пример: В идеале мой конечный результат в df1 должен выглядеть следующим образом, где последняя переменная указывает, что объявление о прибыли фирмы было 2019/01/30:
date stock price days from earnings announcement
2019/01/30 4,4 0
2019/01/31 4,2 1
2019/02/01 4,5 2
2019/02/02 4,6 3
...
Теперь предположим, что фирма представляет новое объявление о прибыли в 2019/04/30. Если это так, он должен выглядеть следующим образом:
date stock price days from earnings announcement
2019/01/30 x 0
2019/01/31 x 1
2019/02/01 x 2
2019/02/02 x 3
...
2019/04/29 x 89
2019/04/30 x 0
2019/05/01 x 1
...
Таким образом, указывается, что 2019/04/29 - это 89 дней после последнего объявления о прибыли, а в 2019/04/30 было представлено новое объявление о прибыли. Соответствующие файлы (включая первые шаги кода) можно найти по этой ссылке на dropbox
stackoverflow.r:
setwd("~/R")
setwd("~/R/stackoverflow")
library(readr)
df2 <- read_delim("eps_forecasted_clean.csv",
";", escape_double = FALSE, col_types = cols(date = col_date(format = "%d-%m-%Y")),
trim_ws = TRUE)
View(df2) #use "date" to lookup
df1 <- read_delim("~/R/stackoverflow/stock_prices.csv",
";", escape_double = FALSE, trim_ws = TRUE)
View(df1)