【发布时间】:2012-02-14 07:01:24
【问题描述】:
我正在尝试做一些看似简单但有点挑战的事情,所以我希望有人能提供帮助!
我有一个时间序列的温度观察:
Lines <-"1971-01-17 298.9197
1971-01-17 298.9197
1971-02-16 299.0429
1971-03-17 299.0753
1971-04-17 299.3250
1971-05-17 299.5606
1971-06-17 299.2380
2010-07-14 298.7876
2010-08-14 298.5529
2010-09-14 298.3642
2010-10-14 297.8739
2010-11-14 297.7455
2010-12-14 297.4790"
DF <- read.table(textConnection(Lines), col.names = c("Date", "Value"))
DF$Date <- as.Date(DF$Date)
mean.ts <- aggregate(DF["Value"], format(DF["Date"], "%m"), mean)
这会产生:
> mean.ts
Date Value
1 01 1.251667
2 02 1.263333
这只是一个示例 -- 我的数据是多年的,因此我可以计算数据的完整月平均值。
然后我想要做的是计算所有一月(单独)与我上面计算的平均一月的差异。
如果我不再使用日期/时间类,我可以通过一些循环来做到这一点,但我想看看在 R 中是否有一种“简洁”的方式来做到这一点?有什么想法吗?
【问题讨论】:
-
我稍微清理了您的代码,但无法理解您所说的
mean.ts是什么(即值刚刚超过 1)。 -
一个小提示。从 2.14 开始,
read.table有一个text参数。 -
您也可以使用
as.POSIXlt(DF[["Date"]])$mon,尽管format仍然更容易 IMO。
标签: r date mean rolling-computation