每周汇总(7天)的数据中的R月(Aggregating weekly (7 day) data to

2019-08-21 10:44发布

我有超过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

我想这一周(7天)的数据转换成使用X1的加权平均月度数据。 请注意,一些在7天X1数据将从一个月重叠到另一(X1 = 79期间2/29至2004年的3/6)。

具体来说,我将获得2004年2月的月度数据(比如,Y1)以下方式

(7*89 + 7*65 + 7*64 + 7*95 + 1*79)/29 = 78.27

难道R 5具有一个功能,将正确做到这一点? (to.monthly在XTS库没有做什么,我需要)如果,没有什么是R中做到这一点的最好方法是什么?

Answer 1:

转换数据每日数据,然后汇总:

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 


Answer 2:

如果你愿意为了让您的DF摆脱“结束一周”的,apply.monthly将工作就像一个魅力。

DF.xts <- xts(DF$X1, order.by=DF$start_wk)

DF.xts.monthly <- apply.monthly(DF.xts, "sum")

那么你可以随时重建结束日期,如果你完全加入30需要他们。



文章来源: Aggregating weekly (7 day) data to monthly in R