0

我试图找到每个日期组(2016 年 1 月 1 日...2016 年 1 月 1 日...1/4/2016)每列(即 PB、PE、PS 的四分位数)的每个四分位数的平均远期回报(列 fwd_rtn)

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 列的平均回报

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()功能,但我不知道如何。

4

1 回答 1

0

要按日期获取单个变量的四分位数,您可以使用以下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)

您应该看看 using lapplyor sapplyto move through multiple columns。

于 2016-04-14T15:27:02.540 回答