簡體   English   中英

使用plyr / dplyr計算每兩年的平均值

[英]Using plyr / dplyr to calculate mean every two years

我有一個龐大的數據集,其中包含34年中500只股票的每日收益。 我首先運行ddply以創建年度中位數並返回列:

annual <- ddply(data, c("TICKER", "year"), summarize, 
                median_data = median(RETX),
                return = prod(1 + RET))

當前數據如下:

  TICKER year median_data    return
1      A 2000  -0.0081645 0.6717770 
2      A 2001  -0.0036845 0.5207290 
3      A 2002  -0.0069040 0.6299523
4      A 2003   0.0036585 1.6280659  
5      A 2004   0.0000120 0.8242153  
6      A 2005   0.0004025 1.3813425  

現在,我想創建一個新列,其中包含過去兩年中每個股票的平均數的平均值:

  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  

任何幫助,將不勝感激!

dplyr解決方案:

為了完整性和正確性,這是dplyr方式,因為此問題有dplyr標記。 除非我缺少某些東西,否則dvdkamp的解決方案僅在您有一只股票時才有效。

數據:500只股票,34年

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)

使用lag()生成均值:

今年和去年的平均值。 請注意默認的lag(,n=1) (包括最近2年)

by_ticker %>% 
         mutate(mean_last2y_incl = ( median_data + lag(median_data) ) / 2 )

去年和前一年的平均值。 (最近2年不包括在內)

by_ticker %>% 
         mutate(mean_last2y_excl = ( median_data + lag(median_data, n=2) ) / 2 )

有關更多信息,請參見: http : //cran.rstudio.com/web/packages/dplyr/vignettes/window-functions.html

嘗試

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM