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