2017-10-20 20 views
-2

:)Comment réduire un cadre de données en regroupant des données?

Existe-t-il un moyen facile de regrouper un ensemble de données particulier dans un bloc de données réduit à partir de certaines caractéristiques? Je pensais à un algorithme pour cela, mais y at-il une fonction dans R qui peut être utilisée pour cela? J'ai essayé d'utiliser dplyr, mais il travaille très bien plaisaient ...

Par exemple:

enter image description here

PS:. Mes données est dans une matrice de plus de 1Go, c'est , J'ai besoin d'un processus plus automatique.

Exemple de données:

structure(list(Nun = 1:6, Event = c(1L, 1L, 1L, 1L, 2L, 2L), 
    Time = structure(c(3L, 4L, 5L, 6L, 1L, 2L), .Label = c("11:34", 
    "11:36", "8:50", "8:52", "8:54", "8:56"), class = "factor"), 
    User = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("U1", 
    "U7"), class = "factor")), .Names = c("Nun", "Event", "Time", 
"User"), class = "data.frame", row.names = c(NA, -6L)) 
+0

Quel est le temps? 'H: M'? ou 'M: S'? – Psidom

+0

Est-ce que c'est «U7» ou «U2»? Et publiez la sortie de 'dput (data)', pas un fichier graphique. –

Répondre

1

Vous pouvez utiliser summarise de dplyr package:

library(dplyr) 

your_data_frame %>% 
    group_by(User, Event) %>% 
    summarise(Duration = max(Time) - min(Time)) 
1

Voici le chemin data.table.

Exemple de données:

x<-structure(list(Nun = 1:6, Event = c(1L, 1L, 1L, 1L, 2L, 2L), 
    Time = structure(c(1508514600, 1508514720, 1508514840, 1508514960, 
    1508524440, 1508524560), class = c("POSIXct", "POSIXt"), tzone = ""), 
    User = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("U1", 
    "U7"), class = "factor")), .Names = c("Nun", "Event", "Time", 
"User"), row.names = c(NA, -6L), class = "data.frame") 

code:

require(data.table) 
setDT(x) 

x[,list(Duration = max(Time)-min(Time)),by = list(Event,User)] 
    Event User Duration 
1:  1 U1 6 mins 
2:  2 U7 2 mins