我在7天内测量了数据。部分数据如下:
start wk end wk X1
2/1/2004 2/7/2004 89
2/8/2004 2/14/2004 65
2/15/2004 2/21/2004 64
2/22/2004 2/28/2004 95
2/29/2004 3/6/2004 79
3/7/2004 3/13/2004 79
我想使用X1的加权平均值将每周(7天)数据转换为月度数据。请注意,7天X1数据中的一些将从一个月到另一个重叠(在2004年2月29日至3/6期间X1 = 79)。
具体而言,我将通过以下方式获得2004年2月的月度数据(例如,Y1)
(7*89 + 7*65 + 7*64 + 7*95 + 1*79)/29 = 78.27
R有没有正确执行此操作的功能? (至少在xts库中没有做我需要的)如果,不是在R中做到这一点的最佳方法是什么?
答案 0 :(得分:3)
将数据转换为每日数据,然后汇总:
Lines <- "start end X1
2/1/2004 2/7/2004 89
2/8/2004 2/14/2004 65
2/15/2004 2/21/2004 64
2/22/2004 2/28/2004 95
2/29/2004 3/6/2004 79
3/7/2004 3/13/2004 79
"
library(zoo)
# read data into data frame DF
DF <- read.table(text = Lines, header = TRUE)
# convert date columns to "Date" class
fmt <- "%m/%d/%Y"
DF <- transform(DF, start = as.Date(start, fmt), end = as.Date(end, fmt))
# convert to daily zoo series
to.day <- function(i) with(DF, zoo(X1[i], seq(start[i], end[i], "day")))
z.day <- do.call(c, lapply(1:nrow(DF), to.day))
# aggregate by month
aggregate(z.day, as.yearmon, mean)
最后一行给出:
Feb 2004 Mar 2004
78.27586 79.00000
答案 1 :(得分:0)
如果你愿意从你的DF中删除“结束周”,apply.monthly将会像魅力一样。
DF.xts <- xts(DF$X1, order.by=DF$start_wk)
DF.xts.monthly <- apply.monthly(DF.xts, "sum")
然后,如果您绝对需要,可以通过添加30来重新创建结束日期。