[英]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的解決方案僅在您有一只股票時才有效。
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.