我有一个数据表,其中包含日期,库存,每日收益,开始日期和结束日期。
我想计算每个股票特定的开始日期和结束日期之间的每日收益平均值,其中end date=date
和start date=date-1 year
。该图像只是我的数据表的一小部分,其中包含5个不同的时间段(2009-2010, 2010-2011...2014-2015)
。
答案 0 :(得分:0)
首先创建数据集:
d1 <- data.frame(Date = seq.Date(as.Date("2009-04-07"), as.Date("2015-04-06"), by = "day"), stock = 60004)
d2 <- data.frame(Date = seq.Date(as.Date("2009-04-07"), as.Date("2015-04-06"), by = "day"), stock = 60005)
d3 <- data.frame(Date = seq.Date(as.Date("2009-04-07"), as.Date("2015-04-06"), by = "day"), stock = 60006)
d4 <- data.frame(Date = seq.Date(as.Date("2009-04-07"), as.Date("2015-04-06"), by = "day"), stock = 60007)
dat <- rbind(d1, d2, d3, d4)
dat$D <- rnorm(dim(dat)[1])
dat$stock <- as.factor(dat$stock)
datzoo$rollmean <- ave(dats$D, datzoo$stock, FUN = function(x) rollmean(x, k = 365, fill = 0, align = "right"))
要使ave
最佳工作,应将stock
转换为一个因数,然后设置ave
函数,其中k
是窗口大小(滚动365表示:天); fill
是用NA
值填充的内容; align
的作用是让函数知道哪一侧(左侧与数据集的顶部相同,右侧与数据集的底部相同),从而计算滚动平均值。