所以我有一个标签分隔值文件,如下所示。
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
答案 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