Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用plyr/dplyr每两年计算一次平均值_R_Plyr_Dplyr - Fatal编程技术网

使用plyr/dplyr每两年计算一次平均值

使用plyr/dplyr每两年计算一次平均值,r,plyr,dplyr,R,Plyr,Dplyr,我有一个庞大的数据集,包括34年内500只股票的每日收益。我首先运行ddply来创建年度中值和收益列: annual <- ddply(data, c("TICKER", "year"), summarize, median_data = median(RETX), return = prod(1 + RET)) 现在,我想创建一个新的列,其中包含过去两年每个股票代码的中位数数据的平均值: TICKER year me

我有一个庞大的数据集,包括34年内500只股票的每日收益。我首先运行ddply来创建年度中值和收益列:

annual <- ddply(data, c("TICKER", "year"), summarize, 
                median_data = median(RETX),
                return = prod(1 + RET))
现在,我想创建一个新的列,其中包含过去两年每个股票代码的中位数数据的平均值:

  TICKER year median_data    return    avg_median
1      A 2000  -0.0081645 0.6717770           NA
2      A 2001  -0.0036845 0.5207290    -0.0036845
3      A 2002  -0.0069040 0.6299523    -0.0105885
4      A 2003   0.0036585 1.6280659           ...
5      A 2004   0.0000120 0.8242153  
6      A 2005   0.0004025 1.3813425  
在此方面的任何帮助都将不胜感激

试试看

window_size <- 2 # number of years to average over

data$avg_median <- filter(data$median_data, 
rep(1,window_size)/window_size,  ## filter coefficients (1/2, 1/2)
sides = 1) ## do the average for years before and including this year
试一试

dplyr解决方案: 为了完整性和正确性,这里是dplyr方式,因为这个问题有一个dplyr标签。除非我遗漏了什么,否则dvdkamp的解决方案只有在你有一只股票的情况下才有效

数据:500只股票,34年 第一组股票 去年和前年的平均值。过去两年独家

请参阅:了解更多信息。

dplyr解决方案: 为了完整性和正确性,这里是dplyr方式,因为这个问题有一个dplyr标签。除非我遗漏了什么,否则dvdkamp的解决方案只有在你有一只股票的情况下才有效

数据:500只股票,34年 第一组股票 去年和前年的平均值。过去两年独家


请参阅:了解更多信息。

从动物园图书馆查看rollapply是第三行平均值:-0.0105885=sum-0.0036845,-0.0069040?为什么这是平均值?…从动物园图书馆查看rollapply是第三行平均值:-0.0105885=sum-0.0036845,-0.0069040?为什么这是平均值…?这将如何工作,为每一个股票的职位要求?不过,在一个自动售票机上,它实际上是相当有效的。按照post的要求,这对每个自动售票机是如何工作的?不过,仅仅在一台自动售票机上,它实际上相当有效。
window_size <- 2 # number of years to average over

data$avg_median <- filter(data$median_data, 
rep(1,window_size)/window_size,  ## filter coefficients (1/2, 1/2)
sides = 1) ## do the average for years before and including this year
df <- expand.grid(
    year = 1980:2014,
    TICKER = paste0(expand.grid(letters,letters)[1:500,1],
                   expand.grid(letters,letters)[1:500,2])
            )
df$median_data <- rnorm(1:500)
df <- df[,c(2,1,3)]
  TICKER year median_data
1     aa 1980   0.5734215
2     aa 1981   1.2102109
3     aa 1982   0.8643419
4     aa 1983   0.7645975
5     aa 1984   0.4004396
6     aa 1985  -1.0195817
by_ticker <- df %>% group_by(TICKER)
by_ticker %>% 
         mutate(mean_last2y_incl = ( median_data + lag(median_data) ) / 2 )
by_ticker %>% 
         mutate(mean_last2y_excl = ( median_data + lag(median_data, n=2) ) / 2 )