我有两个数据表需要合并。一个是公司市场价值随时间的数据,另一个是公司股息历史随时间的数据。我想知道每个季度每家公司支付了多少钱,并将该值放在市场价值数据旁边。
library(magrittr)
library(data.table)
library(zoo)
library(lubridate)
set.seed(1337)
# data table of company market values
companies <-
data.table(companyID = 1:10,
Sedol = rep(c("91772E", "7A662B"), each = 5),
Date = (as.Date("2005-04-01") + months(seq(0, 12, 3))) - days(1),
MktCap = c(100 + cumsum(rnorm(5,5)),
50 + cumsum(rnorm(5,1,5)))) %>%
setkey(Sedol, Date)
# data table of dividends
dividends <-
data.table(DivID = 1:7,
Sedol = c(rep('91772E', each = 4), rep('7A662B', each = 3)),
Date = as.Date(c('2004-11-19', '2005-01-13', '2005-01-29',
'2005-10-01', '2005-06-29', '2005-06-30',
'2006-04-17')),
DivAmnt = rnorm(7, .8, .3)) %>%
setkey(Sedol, Date)
我相信这是一个可以使用data.table滚动连接的情况,类似于:
dividends[companies, roll = "nearest"]
为了尝试获取类似于数据集的结果,请按照以下格式进行操作:
DivID Sedol Date DivAmnt companyID MktCap
1: NA 7A662B <NA> NA 6 61.21061
2: 5 7A662B 2005-06-29 0.7772631 7 66.92951
3: 6 7A662B 2005-06-30 1.1815343 7 66.92951
4: NA 7A662B <NA> NA 8 78.33914
5: NA 7A662B <NA> NA 9 88.92473
6: NA 7A662B <NA> NA 10 87.85067
7: 2 91772E 2005-01-13 0.2964291 1 105.19249
8: 3 91772E 2005-01-29 0.8472649 1 105.19249
9: NA 91772E <NA> NA 2 108.74579
10: 4 91772E 2005-10-01 1.2467408 3 113.42261
11: NA 91772E <NA> NA 4 120.04491
12: NA 91772E <NA> NA 5 124.35588
请注意,我已经按照季度精确匹配了股息与公司市值。(note that I've matched the dividends to the company market values by the exact quarter)
但我不确定如何执行它。 CRAN的pdf对
roll
是什么数字或应该是什么数字相当含混不清(您可以传递日期吗?数字是否量化向前推进的天数? 观察次数的数量?)。而且改变rollends
并不能让我得到想要的结果。最终,我把股息日期映射到它们的季度结束,并在其上进行连接。这是一个好的解决方案,但如果我最终需要知道如何执行滚动连接,则没有用。在您的回答中,您能否描述需要滚动连接的情况,并帮助我理解如何执行它们?(In your answer, could you describe a situation where rolling joins are the only solution as well as help me understand how to perform them?)
companies
的dput()
呢? - Jaaplibrary(lubridate)
的声明了。感谢你发现了这个问题。 - jks612