2

データフレームから Xts オブジェクトを作成し、週ごとに分割してから計算を実行する必要があります。毎週の計算を取得するために、Xts POSIXct 日付を親データフレームの POSIXct 日付と一致させる方法がわかりません。

例:

value <- rep(1, 10)
staff <- as.factor(c("Sam", "Sue", "Sam", "Mary", "Bob", "Sue", "Sam", "Sam", "Sue", "Mary"))
DTime <- as.POSIXct(c("2013-04-01 08:27:00", "2013-04-05 08:28:00", "2013-04-08 08:31:00", 
                    "2013-04-11 08:32:00", "2013-04-15 08:33:00", "2013-04-15 08:40:00",
                    "2013-04-24 08:41:00", "2013-04-27 08:46:00", "2013-04-30 08:46:00",
                    "2013-04-30 08:46:00"))
DF <- data.frame(DTime, staff, value)
tapply(DF$value, DF$staff, sum)

これにより、毎月の計算が得られますが、分割されます。

XtsDF <- xts(order.by=DF$DTime, dateFormat="POSIXct")
weeks <- split(XtsDF,f="weeks")

スタッフごとに合計を実行するために、各週の日付/時刻を取得して DF と一致させるにはどうすればよいですか?

4

2 に答える 2

3

lubridatePOSIXt日付での多くの操作を簡素化する方が使いやすいと思います。それを組み合わせると、plyrさらに簡単になります。

だからここにこの問題への私のアプローチがあります

require(lubridate)
require(plyr)

ddply(DF, .(month = month(DTime), staff), summarise, Sum = sum(value))
##   month staff Sum
## 1     4   Bob   1
## 2     4  Mary   2
## 3     4   Sam   4
## 4     4   Sue   3


ddply(DF, .(week = week(DTime), staff), summarise, Sum = sum(value))
##   week staff Sum
## 1   14   Sam   1
## 2   14   Sue   1
## 3   15  Mary   1
## 4   15   Sam   1
## 5   16   Bob   1
## 6   16   Sue   1
## 7   17   Sam   2
## 8   18  Mary   1
## 9   18   Sue   1
于 2013-06-27T12:04:17.437 に答える
1

ここでdata.table解決策です。最初に数週間の新しい変数を作成します

library(data.table)
DT <- as.data.table(DF)
origin <- as.POSIXct("2012-12-9")  ## A Sunday
DT[, c('weekID','sum') := c(weekID,sum(value)),
      by=list(staff,weekID = as.numeric(DTime - origin) %/% 7)]


                DTime staff value weekID sum
 1: 2013-04-01 08:27:00   Sam     1     16  16
 2: 2013-04-05 08:28:00   Sue     1     16  16
 3: 2013-04-08 08:31:00   Sam     1     17  17
 4: 2013-04-11 08:32:00  Mary     1     17  17
 5: 2013-04-15 08:33:00   Bob     1     18  18
 6: 2013-04-15 08:40:00   Sue     1     18  18
 7: 2013-04-24 08:41:00   Sam     1     19  19
 8: 2013-04-27 08:46:00   Sam     1      2   2
 9: 2013-04-30 08:46:00   Sue     1     20  20
10: 2013-04-30 08:46:00  Mary     1     20  20
于 2013-06-27T12:02:02.733 に答える