2010-12-04 33 views
2

これはまっすぐだと確信していますが、私はそれを働かせることはできません。私は毎日の合計を表すデータフレームを持っています。私は単純に週を合計し、週が表示されない場合はゼロを保持したいと考えています。 Rの最良のアプローチは何ですか?それが重要な場合は、私はここに私のデータフレームp1の構造であるCSVからのデータを読み込み、 週単位のデータ集計R

R.

に一度の日付に変換:

'data.frame': 407 obs. of 2 variables: 
$ date:Class 'Date' num [1:407] 14335 14336 14337 14340 14341 ... 
$ amt : num 45 150 165 165 45 45 150 150 15 165 ... 

と最初の数が..

> head(p1) 
     date amt 
1 2009-04-01 45 
2 2009-04-02 150 
3 2009-04-03 165 
4 2009-04-06 165 
5 2009-04-07 45 
6 2009-04-08 45 

事前に感謝します。

ワンノート:私は1つ前のpostを見たが、それはここで

+0

あなたのデータを 'zoo'や' xts'に変換してみてください。また、あなたが試しているコマンドとそれが与える悪い出力を投稿してください。シェーンの指針に従えば、「総額」の後に「na.rm = T」を設定すると、「NAN」の数週間NaNを返すべきだと思う。 –

答えて

2

を動作させることができなかったが、データを読み込みソリューションであり、週によってそれを集約して、3行にゼロすべてに欠落週間で埋めコードのread.zooは、ヘッダーとカンマのフィールド区切り文字を前提に読み込みます。最初の列をDateクラスに変換し、日付を次の金曜日に変換します。この変換を行う関数nextfriは、動物園パッケージのzoo-quickrefビネットから取得しました。 (週の終わりを別の曜日にする場合は、5を別の日の数字に置き換えてください)。read.zooコマンドは、同じインデックスを持つすべてのポイントも集計します。同じ週のすべてのポイントは今週のインデックスと同じ金曜日になります)。次のコマンドは、最初のものから最後のものまでの週を持つゼロ幅の動物園オブジェクトを作成し、fill = 0を使用して読み込みの出力とマージして、入力した週がその値を取得するようにします。

Lines <- "date,amt 
2009-04-01,45 
2009-04-02,150 
2009-04-03,165 
2009-04-13,165 
2009-04-14,45 
2009-04-15,45" 
library(zoo) 
nextfri <- function(x) 7 * ceiling(as.numeric(x - 5 + 4)/7) + as.Date(5 - 4) 
z <- read.zoo(textConnection(Lines), header = TRUE, sep = ",", 
    FUN = as.Date, FUN2 = nextfri, aggregate = sum) 
merge(z, zoo(, seq(min(time(z)), max(time(z)), 7)), fill = 0) 

私たちは、あなただけのこれをコピーして、右のあなたのセッションに貼り付けることができるように、それは自己完結型にするために上記のtextConnection(Lines)を使用しますが、現実textConnection(Lines)では、例えば、あなたのファイルの名前に置き換えられます"myfile.csv"。読みたいかもしれない動物園のパッケージに付属している3つのビネットがあり

2009-04-03 2009-04-10 2009-04-17 
     360   0  255 

:出力上記の入力については

には、以下の動物園の対象になります。

+0

これは私が探しているものです! 2つのこと:CSVファイルの「日付」が日/月/年であると思われるため、エラーが発生しています。私はこれを形式 "%d /%m /%Y"として渡すことができる助けを見ましたが、それがエラーを引き起こしているかどうかはわかりません。第二に、私は月曜日に新しい週が始まる日曜日に週が終了するようにしたいと思います。再度、感謝します! – Btibert3

4

lubridateライブラリと解決策:

weeks <- week(df$date) 
sums <- tapply(df$amt, weeks, sum) 
# 14 15 16 20 
#360 210 45 45 

欠落週間のゼロを配置するには:

library(lubridate) 
Lines <- "date,amt 
2009-04-01,45 
2009-04-02,150 
2009-04-03,165 
2009-04-13,165 
2009-04-14,45 
2009-04-15,45 
2009-05-15,45" 
df <- read.csv(textConnection(Lines)) 

あなたは、それは簡単です行方不明週間0を必要としない場合

span <- min(weeks):max(weeks) 
out <- array(0, dim = length(span), dimnames = list(span)) 
out[dimnames(sums)[[1]]] <- sums 
# 14 15 16 17 18 19 20 
#360 210 45 0 0 0 45