我的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')
问题是使用此函数我不确定返回quantile
函数的值是什么。
有什么建议吗?
答案 0 :(得分:4)
您需要学习如何阅读帮助页面(有时您需要了解@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)
这样...,
将任何参数传递给quantile
函数。 (从页面上看不清楚是否可以接受字符名称,但如果你没有收到错误,那么你已经测试过了。分位数功能:
?quantile
...有一个用法部分:
## Default S3 method:
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE,
names = TRUE, type = 7, ...)
因此,您需要提供符合您所需级别的'probs'参数,因为此时您获得的默认级别为:min,25th百分位数,中位数,75th百分位数和最大值。所以试试:
aggregate(Temp ~ day(index(Temp)) + month(index(Temp)),
FUN = 'quantile', probs=c(5, 33, 67, 95)/100 )
回想起来,你所提供的公式会成功,这似乎是一个编程奇迹:我想我们会按照aggregate
的'zoo'帮助页面中的示例来使用它:
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 ...