多列和多个日期的四分位数平均值

Mean of quartile for multiple columns and multiple dates

我试图找到每个列(即 PB、PE、PS 的四分位数)的每个四分位数的平均前向 return(列 fwd_rtn)日期组 (1/1/2016...1/4/2016)

head(df)

日期股价 PB PE PS fwd_rtn
1 1/1/2016 A 11.90 0.4 0.10 0.57 -0.015
2 1/1/2016 B 3.56 0.8 0.09 0.26 -0.036
3 1/1/2016 C 1.29 1.2 0.18 1.60 0.10
......
4 1/4/2016 A 12.80 0.39 0.13 0.53 -0.01
5 1/4/2016 B 4.03 0.76 0.08 0.23 0.02
6 1/4/2016 C 1.83 0.87 0.14 1.16 0.03

到目前为止,我已经能够使用此代码

找到 1 个日期的 1 列的平均值 return
df$qPB <- cut(df$PB, breaks = quantile(df$PB, c(0,.25,.5,.75,1)),include.lowest = TRUE)  

aggregate(df$fwd_rtn,list(qPB = df$qPB),FUN=mean)

这给了我正确的答案。但我正在努力为多列做这件事。我想我应该使用 dplyrgather() 函数,但我不知道如何使用。

要按日期获取单个变量的四分位数,您可以使用 ave 函数:

df$qPB <- ave(df$PB, df$Date, FUN= function(i) cut(i, breaks = quantile(df$PB, 
                                          c(0,.25,.5,.75,1)),include.lowest = TRUE)
# a minor addition to aggregate
aggregate(df$fwd_rtn, list("qPB"=df$qPB, "date"=df$Date), FUN=mean)

您应该看看使用 lapplysapply 在多个列中移动。