2016-04-14 60 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

怎麼樣你打算總結諸如「獲取」和「發送」的值? 「獲得」+「發送」多少錢?試試'aggregate(d [「Status」],list(fiveMin = cut(d $ TimeStamp,「5 mins」)),length)'也許 –

+0

@DavidArenburg,我需要計算得到併發送不同 – user1471980

+0

試試'library data.table); dcast(setDT(d),cut(TimeStamp,「5分鐘」)〜狀態,長度)' –

回答

1

如果你需要這個,每間隔和渴望一段間隔的零數,則可能需要merge這與你的願望使用seq通用也有POSIXt方法允許時間間隔指定的時間間隔邊界的矢量與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