【发布时间】:2018-06-13 14:23:21
【问题描述】:
我有一个包含日期、唯一公司名称及其股票回报的数据表,看起来有点像这样:
require(data.table)
DATE <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
COMP <- c(replicate(60, "AAPL"), replicate(60, "INTL"), replicate(60, "GOOGL"), replicate(60, "MSFT"))
RET <- rnorm(240)
test1 <- data.table(DATE, COMP, RET)
现在我要计算每个数据点的前 6 个同月日历平均收益。所以例如对于 1990 年 1 月的 AAPL 股票收益,我希望在 Jan90 收益旁边的新列中获得 Jan89、Jan 88、...和 Jan84 收益的平均值。我试图习惯跳过行,但现在我有点卡住了。这是我用来玩这个机制的代码:
test1$new1 <- test1$RET[seq.int(from = 1L, to = 20L, by = 6L)]
test1$new2 <- test1$RET[seq.int(from = -20L, to = 0L, by = 6L)]
n = 6
test1$new3 <- rowMeans(test1[seq(from = 1, to = nrow(test1), by = n),])
有没有人有想法,如何做到这一点?
原因,为什么它与其他问题不同:这里的关键是只取以前的值,同时只考虑某家公司。此外,它应该只是作为新列添加。
PS:我不致力于数据表,到目前为止我只是非常喜欢这个包。
【问题讨论】:
-
查看
rollmean包中的函数zoo。 -
嘿,你能帮我看看如何调整代码吗?我之前看到了解决方案,但是 1.我不确定,如何编写只需要以前值的代码,以及 2.如何分离每个公司?谢谢!