R 使用.data.table的去年(半年、月)观测值平均值

R 使用.data.table的去年(半年、月)观测值平均值,r,data.table,R,Data.table,我想根据每日数据计算数据集中所有股票在过去12个月、6个月和3个月的平均交易量。 以下是示例数据: library(BatchGetSymbols) sample <- BatchGetSymbols(tickers = c('AAPL', 'AMZN'), first.date = Sys.Date() - 500) sample <- sample$df.tickers sample <- sample[, c('ticker', 'ref.date', 'volume')

我想根据每日数据计算数据集中所有股票在过去12个月、6个月和3个月的平均交易量。 以下是示例数据:

library(BatchGetSymbols)
sample <- BatchGetSymbols(tickers = c('AAPL', 'AMZN'), first.date = Sys.Date() - 500)
sample <- sample$df.tickers
sample <- sample[, c('ticker', 'ref.date', 'volume')]
库(BatchGetSymbols)

示例以下是一种使用
dpyr
purr
的方法:

library(dplyr)
library(purrr)
sample %>%
  group_by(ticker) %>%
  summarise(map_dfr(setNames(c(3,6,12),c("3month","6month","12month")),
                    ~ mean(volume[ref.date > (Sys.Date() - 30 * .x)])))
  ticker   `3month`   `6month`  `12month`
  <chr>       <dbl>      <dbl>      <dbl>
1 AAPL   114310505  144409320. 152001362.
2 AMZN     4421073.   4711179.   4966227.

这里有一种使用滚动时间概念的方法

我没有安装该软件包,因此我将使用软件包(我从下载)中提供的
ExampleData.rds
。我将把它分为前两部分。(我这样做是为了简单/演示,不是因为它是必需的。我还使用所有15个ticker在完整的数据集上运行了这段代码,在过去的两段时间里,这段代码只花了不到0.03秒。)

这些数据只包括2014年的数据,因此我还将把您的周期减少到1个月和3个月,认识到您可以添加任意数量的周期

SAMP%
SAMP2[,on=(ticker==ticker,pass.date=ref.date)]%>%
[订单(股票代码,参考日期),]
#股票参考日期卷当前过去日期卷当前过去日期
#1:ABEV3.SA 2014-01-02 8036139 2014-01-02 2014-01-02 8036139 2014-01-02 2013-12-02
#2:ABEV3.SA 2014-01-03 24922793 2014-01-02 2014-01-02 8036139 2014-01-02 2013-12-02
#3:ABEV3.SA 2014-01-03 24922793 2014-01-03 2014-01-03 24922793 2014-01-03 2013-12-03
#4:ABEV3.SA 2014-01-06 9355961 2014-01-02 2014-01-02 8036139 2014-01-02 2013-12-02
#5:ABEV3.SA 2014-01-06 9355961 2014-01-03 2014-01-03 24922793 2014-01-03 2013-12-03
#    ---                                                                                   
#10326:BBAS3.SA 2014-12-30 2800100 2014-12-22 2014-12-22 3222302014-12-22 2014-11-22
#10327:BBAS3.SA 2014-12-30 2800100 2014-12-23 2014-12-23 3234100 2014-12-23 2014-11-23
#10328:BBAS3.SA 2014-12-30 2800100 2014-12-26 2014-12-26 1553400 2014-12-26 2014-11-26
#10329:BBAS3.SA 2014-12-30 2800100 2014-12-29 2014-12-29 1984000 2014-12-29 2014-11-29
#10330:BBAS3.SA 2014-12-30 2800100 2014-12-30 2014-12-30 2800100 2014-12-30 2014-12-30 2014-11-30
请注意,第一个
ref.date
2014-01-02
)有一次出现(毫不奇怪,在该集合中2014年之前没有数据),
2014-01-03
有两行(
02
03
),等等

  • 在此基础上,我将更改流以添加用于每个聚合的数据长度

    newdats%
    SAMP2[,on=(ticker==ticker,pass.date=ref.date)]%>%
    [组名((平均(i.volume),.N),c(nm,paste0(nm,”)),按=(股票代码,参考日期)]
    },姓名(过去),过去)
    SAMP2[,c(“现在”、“过去的日期”):=NULL]
    
    在坎贝尔之外,我的问题还不够清楚。我想计算每个观测值的3、6和12个月平均值(ofc,对于前n个观测值,值为NA)。所以我必须构造3个新变量。类似于滚动操作,但随时间变化,而不是显式n参数。
    library(data.table)
    setDT(sample)
    sample[,lapply(setNames(c(3,6,12),c("3month","6month","12month")),
                   function(x)mean(volume[ref.date > (Sys.Date() - 30 * x)])),by = ticker]
       ticker    3month    6month   12month
    1:   AAPL 114310505 144409320 152001362
    2:   AMZN   4421073   4711179   4966227