1

月ごとの平均売上高を示す集計関数は正常に機能します。

library(chron)
set.seed(42)
dat <- data.frame(sales = rnorm(1000, mean = 1000, sd = 40),
              dates = rep(as.Date(seq(from = 14610, to = 14859),
                              origin = "1970-01-01"),4))
aggregate(sales~months(as.chron(dates)), mean, data=dat)

...そして次の出力を生成します:

months(as.chron(dates))     sales
1                     Jan 1000.0723
2                     Feb  999.1580
3                     Mar  995.3055
4                     Apr 1000.4912
5                     May 1003.9703
6                     Jun  997.1086
7                     Jul  996.5939
8                     Aug  998.5012
9                     Sep 1001.3709

私の理解では、次のキャストステートメントは同じ出力を生成するはずです。

cast(dat, months(as.chron(dates)) ~ ., mean, value="sales")

ただし、代わりに次のエラーが返されます。

Error: Casting formula contains variables not found in molten data: months(as.chron(dates))

何かが足りない可能性がありますが、キャストステートメント内でchronmonths()呼び出しを使用することは可能ですか?次の2つのステートメントはcast()でも同じことを実現しますが、私は1つのステップでそれを実行し、キャストがどのように機能するかをよりよく理解しようとしています。

dat$mont <- months(as.chron(dat$dates))
cast(dat, mont ~ ., mean, value="sales")

よろしくお願いします、-JT

4

1 に答える 1

3

これはで動作しますreshape2

library(reshape2)
dcast(dat, months(as.chron(dates)) ~ ., mean, value.var="sales")
##   months(as.chron(dates))        NA
## 1                     Jan 1004.5404
## 2                     Feb 1002.3146
## 3                     Mar  996.0883
## 4                     Apr  994.1707
## 5                     May 1000.4652
## 6                     Jun 1002.8020
## 7                     Jul  996.0357
## 8                     Aug 1001.6754
## 9                     Sep  997.6772

またはあなたが使用することができますplyr

library(plyr)
ddply(dat, .(months = months(as.chron(dates))), summarize, sales = mean(sales))
##  months     sales
## 1   Jan 1004.5404
## 2   Feb 1002.3146
## 3   Mar  996.0883
## 4   Apr  994.1707
## 5   May 1000.4652
## 6   Jun 1002.8020
## 7   Jul  996.0357
## 8   Aug 1001.6754
## 9   Sep  997.6772

またはdata.tableを使用

library(data.table)
DT <- data.table(dat)
DT[, month := months(as.chron(dates))][,list(sales =  mean(sales)),by = month]
##    month     sales
## 1:   Jan 1004.5404
## 2:   Feb 1002.3146
## 3:   Mar  996.0883
## 4:   Apr  994.1707
## 5:   May 1000.4652
## 6:   Jun 1002.8020
## 7:   Jul  996.0357
## 8:   Aug 1001.6754
## 9:   Sep  997.6772

マシュー・ダウルからのコメント

式を直接受け入れる:=ので、iiucは必要ありません:by

DT[, list(sales=mean(sales)), by=months(as.chron(dates))]
##    months     sales
## 1:    Jan 1004.5404
## 2:    Feb 1002.3146
## 3:    Mar  996.0883
## 4:    Apr  994.1707
## 5:    May 1000.4652
## 6:    Jun 1002.8020
## 7:    Jul  996.0357
## 8:    Aug 1001.6754
## 9:    Sep  997.6772
于 2012-07-06T02:06:59.387 に答える