如何总结5年的月度值? (适合单变时间系列)

时间:2015-06-01 12:23:06

标签: r time-series

所以我有一个标签分隔值文件,如下所示。

 Date       Value1
 2010-01-01    2 
 2010-01-02    0.2 
 2010-02-03    5 
 2010-02-07    2 
 2010-03-03    1 
 . . .
 2015-01-01    1.0

我需要帮助总结每个月的所有值。 因此,1月份的情况将是2。2,2月7日等。

我目前在R studio工作,这需要在我的时间序列中完成。 R中有内置命令吗?或者这可以在Java或Python中轻松完成吗?

预期结果如下:

 Date      Value1
 2010-01     2.2 
 2010-02     7  
 2010-03     1 
 . . .
 2015-01     1.0

1 个答案:

答案 0 :(得分:4)

在R中,这是一个简单的聚合问题。

aggregate(Value1 ~ cbind(Date = format(as.Date(Date), "%Y-%m")), df, sum)
#      Date Value1
# 1 2010-01    2.2
# 2 2010-02    7.0
# 3 2010-03    1.0
# 4 2015-01    1.0

或者您可以使用动物园包中的as.yearmon以方便使用。 as.yearmon的优点是它按日历顺序排序而不仅仅是一个字符串(如format给出的),因为基数R没有包含一天的日期类

aggregate(Value1 ~ Date, transform(df, Date = as.yearmon(Date)), sum) 
#       Date Value1
# 1 Jan 2010    2.2
# 2 Feb 2010    7.0
# 3 Mar 2010    1.0
# 4 Jan 2015    1.0

或者您可以将整个对象转换为zoo

z <- read.zoo(df) 
aggregate(z, as.yearmon, sum)

或者如果您的数据很大,您也可以与data.table包结合使用

library(data.table)
setDT(df)[, list(Value1 = sum(Value1)), by = list(Date = as.yearmon(Date))]
#        Date Value1
# 1: Jan 2010    2.2
# 2: Feb 2010    7.0
# 3: Mar 2010    1.0
# 4: Jan 2015    1.0