【问题标题】:Calculating mean between two dates计算两个日期之间的平均值
【发布时间】:2018-07-12 14:27:50
【问题描述】:

我有一个包含日期、股票、每日回报、开始日期和结束日期列的数据表。

我想计算特定于每只股票的开始日期和结束日期之间的每日回报平均值,其中end date=datestart date=date-1 year。该图像是我的数据表的一小部分,其中包含 5 个不同的时间括号(2009-2010, 2010-2011...2014-2015)

pic1

【问题讨论】:

  • 欢迎来到 StackOverflow。为了提出更好的问题,请阅读How to ask a good questionMinimal, Complete, and Verifiable ExampleHow to make a great R reproducible example
  • 由于您的数据中没有开始日期值,因此您无法计算任何每日回报。
  • "D" 表示我想要求平均值的每日回报值。所以我尝试了类似 dt[,meanreturn:=mean(D), by=stock] 之类的方法,但我不确定在 mean() 中放入什么来让它知道只在 start 和 end 之间找到 D 值的平均值日期。
  • 你能更清楚你的期望吗?也许向我们展示所需输出的示例。
  • 我想我明白了你的要求,但我不确定你计算的时间范围:2009-2010,具体是什么日期?

标签: r datatable mean


【解决方案1】:

让我们首先创建数据集:

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 是让函数知道从哪一侧(左侧与顶部相同,右侧与数据集底部相同)计算滚动平均值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2019-09-02
    相关资源
    最近更新 更多