分位数;在R中的zoo对象上聚合

分位数;在R中的zoo对象上聚合,r,aggregate,quantile,R,Aggregate,Quantile,我有一个zoo对象看起来像 library(zoo) library(lubridate) TimeStamp=seq(dmy("01/01/2002"), dmy("17/12/2014"), by="day") Dummy= rnorm(length(TimeStamp)) Temp=zoo(Dummy,TimeStamp) 我试图计算一年中每天的5%、33%、67%和95%的百分位数/分位数,以创建一个“标准”。 因此,对于01/01,我希望根据我在数据集中对1月1日的所有观察得到4个分

我有一个
zoo
对象看起来像

library(zoo)
library(lubridate)
TimeStamp=seq(dmy("01/01/2002"), dmy("17/12/2014"), by="day")
Dummy= rnorm(length(TimeStamp))
Temp=zoo(Dummy,TimeStamp)
我试图计算一年中每天的5%、33%、67%和95%的百分位数/分位数,以创建一个“标准”。 因此,对于01/01,我希望根据我在数据集中对1月1日的所有观察得到4个分位数的值。每天都一样

现在我用的是:

aggregate(Temp ~ day(index(Temp)) + month(index(Temp)), FUN = 'quantile')
问题是,使用此函数时,我不确定返回分位数函数的值是多少


有什么建议吗?

您需要学习如何阅读帮助页面(有时还需要学习@GGrothendeick刚刚指出的帮助页面)。我可能(确实)认为第一页会有用,但我错了:

 ?aggregate.zoo     # 
 ?aggregate.formula # fortunately, they are the same w.r.t the dots-arg
帮助页面有一个用法部分:

## S3 method for class 'zoo'
aggregate(x, by, FUN = sum, ..., regular = NULL, frequency = NULL)
## S3 method for class 'formula'
aggregate(formula, data, FUN, ...,
          subset, na.action = na.omit)
## Default S3 method:
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE,
         names = TRUE, type = 7, ...)
因此,
…,
将向
分位数
函数传递任何参数。(从页面上看不清楚输入字符名是否可以接受,但是如果没有错误,那么您已经测试过了。分位数函数:

  ?quantile
…有一个用法部分:

## S3 method for class 'zoo'
aggregate(x, by, FUN = sum, ..., regular = NULL, frequency = NULL)
## S3 method for class 'formula'
aggregate(formula, data, FUN, ...,
          subset, na.action = na.omit)
## Default S3 method:
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE,
         names = TRUE, type = 7, ...)
因此,您需要提供一个与所需级别匹配的“probs”参数,因为此时您将获得默认级别:最小、第25百分位、中位数、第75百分位和最大。因此,请尝试:

aggregate(Temp ~ day(index(Temp)) + month(index(Temp)), 
          FUN = 'quantile', probs=c(5, 33, 67, 95)/100 )
回想起来,您提供的公式能够成功似乎是一个编程奇迹:我想我们应该按照“动物园”帮助页面中的示例来使用此公式:

 str( aggregate(Temp,  time(Dummy), 
            FUN = 'quantile', probs=c(5, 33, 67, 95)/100 ) )

‘zoo’ series from 1 to 4734
  Data: num [1:4734, 1:4] 0.235 -1.435 -0.922 -0.542 -1.151 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "5%" "33%" "67%" "95%"
  Index:  num [1:4734] 1 2 3 4 5 6 7 8 9 10 ...

响应顶部讨论的帮助页面是针对zoo方法的,但底部实际使用的方法是formula方法。考虑到
聚合的解析后,这似乎很奇怪。formula
应该能够接受整个zoo对象名称作为LHS。