2013-04-10 145 views
1

我在7天內測量了數據。部分數據如下所示:每週(7天)將數據彙總到R中的每月

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數據中的一些將從一個月重疊到另一個月(在2004年2/29至3/6期間,X1 = 79)。

具體來說,我將獲得2004年2月的月度數據(比如,Y1)以下方式

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

是否R 5具有一個功能,將正確做到這一點? (to.monthly在xts庫不做我所需要的)如果,而不是什麼是在R中做到這一點的最佳方式?

回答

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 
+0

是的,完善的需要他們。我試圖將數據轉換爲每日數據,並且無法高效地完成。非常感謝 – 2013-04-10 20:40:28

0

如果你願意爲了讓您的DF擺脫「結束一週」的,申請。月會像魅力一樣工作。

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

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

那麼你可以隨時重建結束日期,如果你完全加入30