1

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 ライブラリの to.monthly は私が必要とすることをしません) R でこれを行う最良の方法は何ですか?

4

2 に答える 2

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 
于 2013-04-10T18:02:45.727 に答える
0

DF から「週の終了」を削除したい場合は、apply.monthly が魅力的に機能します。

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

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

その後、どうしても必要な場合は、30 を追加することでいつでも終了日を再作成できます。

于 2014-10-30T00:38:48.293 に答える