【问题标题】:Mean of quartile for multiple columns and multiple dates多列和多个日期的四分位数平均值
【发布时间】:2016-04-14 09:44:00
【问题描述】:

我正在尝试查找每个日期组(2016 年 1 月 1 日...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 2016 年 1 月 1 日 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 2016 年 1 月 4 日 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 2016 年 1 月 4 日 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() 函数,但我不知道如何。

【问题讨论】:

  • 任何人都可以给我一些面包屑/指向我如何解决这个问题的大致方向吗?非常感谢您的帮助!
  • 谁能帮我如何使用apply函数循环遍历?我很困惑,因为找到分位数部分......然后是聚合。它的两个部分,所以我应该分别对它们使用 apply 功能?我如何链接这两个部分?任何帮助表示赞赏。谢谢大家

标签: r loops quartile


【解决方案1】:

要按日期获取单个变量的四分位数,您可以使用 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 在多个列中移动。

【讨论】:

  • 非常感谢 lmo。起初它给了我一个错误,但是在我将“date”=Date 更改为“date”=df$Date 之后就可以了。接下来是如何将它用于多列。将尝试使用建议的 lapply 或 sapply。
  • 抱歉,我仍然不知道如何使用 lapply。但这没关系,因为我一直在单独做(目的是在最后绑定结果),即对于 PS 我做了: df$qPS
猜你喜欢
  • 2019-01-21
  • 2019-04-11
  • 2021-10-17
  • 2010-12-07
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
相关资源
最近更新 更多