2016-04-14 2 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") 

Ceci est un sous-ensemble d'un grand ensemble de données. J'ai besoin de compter la colonne d'état toutes les 5 minutes. Le statut pourrait être envoyer ou recevoir. J'ai besoin de compter le statut toutes les 5 minutes.comment résumer les facteurs dans la trame de données toutes les 5 minutes

J'ai essayé quelque chose comme ceci:

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

il se plaint de ne pas pouvoir compter les facteurs. Est-ce qu'il y a un autre moyen?

+0

Comment sont vous prévoyez de faire des sommations telles que "get" et "send"? Combien coûte "get" + "envoyer"? Essayez 'aggregate (d [" Status "], liste (fiveMin = couper (d $ TimeStamp," 5 mins ")), longueur)' peut-être –

+0

@DavidArenburg, je dois compter de get et envoyer différemment – user1471980

+0

Essayez 'library (data.table); dcast (setDT (d), cut (TimeStamp, "5 mins") ~ Statut, longueur) ' –

Répondre

1

Si vous avez besoin de ceci pour chaque intervalle et que vous voulez que le zéro compte pour certains intervalles, vous devrez merge avec un vecteur avec les limites d'intervalle que vous désirez en utilisant le seq générique qui a aussi une méthode POSIXt permettant une spécification d'intervalle avec by="5 min". Avec l'exemple proposé, on ne voit que d'un seul point du temps si le résultat est particulièrement riche:

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

Je suggère simplement convertir en un grand format, voici un data.table exemple

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