【问题标题】:How to aggregate data in timeSequence?如何按 timeSequence 聚合数据?
【发布时间】:2011-11-01 07:51:31
【问题描述】:

我有一个问题,真的需要你的帮助吗?我的数据(我们将其命名为“日期”)如下所示:

location       date  value
       1 2010-01-01    6.4
       1 2010-01-02    5.7
       .
       .  
       2 2010-01-01    0.8
       2 2010-01-02    2.5
       2 2010-01-03    5.5

我想汇总位置和 3 周期间的数据(价值)?我已经尝试使用包 timeSeries 但它不起作用?

by1 <- timeSequence(from = "2009-12-30", to = "2010-12-29", by= "4 week")
by1
aggregate(date, by=list(by1, date$location), sum)

【问题讨论】:

  • 你好 MtS。如果 Andrie 的回复解决了您的问题,您可以/应该“接受”它,方法是单击它旁边的复选标记。谢谢。

标签: r aggregate time-series


【解决方案1】:

这是一种使用seq.Date 生成断点、cut 对您的数据进行分箱和ddply 进行汇总的方法:

# Create sample data
set.seed(1)
dat <- data.frame(
  location = rep(1:3, each=30),
  date = rep(seq(as.Date("2010-01-01"), by="3 day", length.out=30), 3),
  value=rnorm(90)
)

# Create a sequence of dates in period of 3 weeks ot serve as cut points
dateCuts <- seq(from=min(dat$date), to=max(dat$date)+31, by="3 week")

# Use cut to separate dates into periods
dat$period <- cut(dat$date, breaks=dateCuts)

# Summarise data
library(plyr)
ddply(dat, .(location, period), summarize, value=mean(value))

结果:

   location     period       value
1         1 2010-01-01  0.04475859
2         1 2010-01-22  0.01062880
3         1 2010-02-12  0.62024902
4         1 2010-03-05 -0.31364304
5         1 2010-03-26 -0.03010425
6         2 2010-01-01 -0.08522653
7         2 2010-01-22  0.37708986
8         2 2010-02-12  0.12910449
9         2 2010-03-05  0.08597110
10        2 2010-03-26  0.21733251
11        3 2010-01-01  0.10295425
12        3 2010-01-22  0.46194453
13        3 2010-02-12 -0.35546029
14        3 2010-03-05  0.17216486
15        3 2010-03-26  0.31855880

【讨论】:

    【解决方案2】:

    使用lubridate,你可以用一个单行来写这个。

    ddply(dat, .(location, ceiling(week(date)/3)), summarize, value = mean(value))
    

    【讨论】:

    • ceilingweek 的用法非常简洁,但您确定这样做是一样的吗? week 似乎返回了当月的一周——它不会分成 n 周的时间段。也许这就是 OP 想要的(即比较 1 月的第 1 周和 2 月的第 1 周),但我的阅读是比较第 1-3 周和第 4-6 周和第 7-9 周等。
    • @Andrie 你是对的。您的解决方案会在没有此限制的情况下处理分箱。
    猜你喜欢
    • 2017-03-26
    • 2019-08-02
    • 1970-01-01
    • 2016-10-23
    • 2015-01-08
    • 2011-01-16
    • 2015-07-27
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多