我正在尝试为每个日期组(1/1/2016 ... 1/4)找到每列的每个四分位数的平均前向返回(列fwd_rtn)(即PB,PE,PS的四分位数) / 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列的平均回报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)
给了我正确的答案。但是我很难为多列做这件事。我想我应该使用dplyr
和gather()
函数,但我不知道如何。
答案 0 :(得分: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)
您应该看一下使用lapply
或sapply
来移动多个列。