【发布时间】:2015-11-20 13:28:55
【问题描述】:
我的问题如下:我有一个包含 5 分钟降水数据的时间序列,例如:
Datum mm
1 2004-04-08 00:05:00 NA
2 2004-04-08 00:10:00 NA
3 2004-04-08 00:15:00 NA
4 2004-04-08 00:20:00 NA
5 2004-04-08 00:25:00 NA
6 2004-04-08 00:30:00 NA
采用这种结构:
'data.frame': 1098144 obs. of 2 variables:
$ Datum: POSIXlt, format: "2004-04-08 00:05:00" "2004-04-08 00:10:00" "2004-04-08 00:15:00" "2004-04-08 00:20:00" ...
$ mm : num NA NA NA NA NA NA NA NA NA NA ...
如您所见,时间序列以大量NA's 开头,但在更下方有测量的降水,尽管由于测量站故障而充斥着单一的、不太常见的NA's。
我想要实现的是将测得的降水量总结为每小时总和,而不考虑 NA's。
这是我迄今为止尝试过的:
sums <- aggregate(precip["mm"],
list(cut(precip$Datum, "1 hour")), sum)
即使时间戳正确聚合到小时,所有总和都是0 或NA。如果根本没有NA,则甚至不会计算总和。
另外需要考虑:
气象学中每小时降水量总和总是描述直到某个小时的累积总和:0:00点的降水量描述从前一天23:00到的总和 0:00。所以我总是需要总结前一个小时。
可重现的示例
set.seed(1120)
s <- as.POSIXlt("2004-03-08 23:00:00")
r <- seq(s, s+1e4, "30 min")
precip <- data.frame(Datum=r, mm=sample(c(1:5,NA), 6, T))
Datum mm
2004-03-08 23:00:00 4
2004-03-08 23:30:00 1
2004-03-09 00:00:00 2
2004-03-09 00:30:00 4
2004-03-09 01:00:00 1
2004-03-09 01:30:00 4
通过上面的例子,我正在寻找的结果是:
Datum mm
2004-03-09 00:00:00 5
2004-03-09 01:00:00 6
2004-03-09 02:00:00 5
【问题讨论】:
-
未来,请考虑阅读How to Ask 以及如何创建reproducible example in R。如果您提供明确的预期输出,则其他人可以更轻松地为您提供帮助,而无需大量澄清。
-
在示例数据框中,输出应该是什么?请回答实际代码而不是输出的书面描述。
-
我们真的来回走了这么久,而您一直都有解决方案吗?我最初的解决方案会产生该输出。
-
不,抱歉,它没有。在我想要的结果中,
2004-03-09 00:00:00(= 5) 的总和是 23:00 和 23:30 的4+1之和。它被转移了。
标签: r time-series aggregate