2016-04-14 8 views
0
dput(d) 
structure(list(TimeStamp = structure(c(1459569739, 1459569739, 
1459569739, 1459569739, 1459569739, 1459569739), class = c("POSIXct", 
"POSIXt"), tzone = ""), Status = structure(c(1L, 2L, 1L, 1L, 
1L, 1L), .Label = c("get", "send"), class = "factor")), .Names = c("TimeStamp", 
"Status"), row.names = c(NA, 6L), class = "data.frame") 

これは大きなデータセットのサブセットです。 5分ごとにステータス列をカウントする必要があります。ステータスは送信または取得することができます。 5分ごとにステータスをカウントする必要があります。5分ごとにデータフレームの要因を要約する方法

私はこのような何かを試してみました:

agg<- aggregate(data["Status"], list(fiveMin=cut(data$TimeStamp, "5 mins")),sum) 

は、それが要因をカウントすることはできません文句を言っています。他の方法はありますか?

+0

する方法あなたは "get"や "send"のような値を合計することを計画していますか?どのくらい "取得" + "送信"ですか?おそらく –

+0

@DavidArenburg、私はgetとsendを別々に計算する必要があります – user1471980

+0

'ライブラリを試してみてください('データ表) ; dcast(setDT(d)、cut(TimeStamp、 "5分")〜ステータス、長さ) ' –

答えて

1

あなたはすべての時間間隔のためにこれを必要とし、いくつかの間隔でゼロカウントを望むならば、あなたはまた、間隔の指定が可能POSIXtメソッドを持っていることseqジェネリックを使用して希望する区間の境界でベクターでmergeにこれを必要とするかもしれby="5 min"。例が提供して結果が特に豊富ではないので、我々は、単一の時点を参照してください。

> tapply(d$Status, cut(d$TimeStamp, breaks="5 min"), function(x) sum(x=="get")) 
2016-04-01 21:02:00 
        5 
1

私は単にワイドフォーマットに変換することを示唆している、ここでdata.table例だ

library(data.table) 
dcast(setDT(d), cut(TimeStamp, "5 mins") ~ Status, length) 
#    TimeStamp get send 
# 1: 2016-04-02 07:02:00 5 1 
関連する問題