多列和多个日期的四分位数平均值
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)
这给了我正确的答案。但我正在努力为多列做这件事。我想我应该使用 dplyr
和 gather()
函数,但我不知道如何使用。
要按日期获取单个变量的四分位数,您可以使用 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
在多个列中移动。
我试图找到每个列(即 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 列的平均值 returndf$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()
函数,但我不知道如何使用。
要按日期获取单个变量的四分位数,您可以使用 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
在多个列中移动。