2016-09-30 6 views
0

Ich habe Daten, die hier wie dieses Beispiel aussehen: http://pastebin.com/5MPCFGWKWie zeichne ich gruppierte Daten, sortiert nach der Anzahl der Einträge in jeder Gruppe, in R?

Ich brauche jeden id als Timeline zu zeichnen, so etwas wie dies ich tue.

ggplot(df, aes(x=relative_timestamp, y=id, color=action)) 

welche Art von Arbeiten, außer dass es nicht das hilfreichste Diagramm ist. Ich dachte, ich würde versuchen, die Gruppen nach der Anzahl der Ereignisse zu sortieren, aber ich kann nicht herausfinden, wie. Ich versuchte meine Hand bei dplyr, aber ich war verwirrt mit den Dokumenten und schaffte es kaum, den Datenrahmen durch id zu gruppieren. Ideen?

BEARBEITEN Ich habe eine Beispiel-CSV hinzugefügt. Mein Ziel ist es, diese Zeitleisten nach der Anzahl ihrer Einträge zu sortieren. In diesem Fall ist 0 derjenige mit der geringsten Menge und 1 ist derjenige mit der größten Menge. Besonders gut wäre es, sie nach dem Zeitpunkt der letzten CLOSE-Aktion zu sortieren (separate Darstellung, nicht wie oben). Es sollte sowieso genau eine in jeder Gruppe sein.

+2

Bitte stellen Sie Ihr Beispiel reproduzierbar so ist es einfacher für andere Sie – Sotos

+0

helfen 'o <- count (df, Aktion, sort = TRUE); df $ action <- faktor (df $ aktion, levels = o $ aktion) 'dann plot – Axeman

+0

höchstwahrscheinlich wollen sie etwas wie aes machen (x = relative_timestamp, y = as.numeric (aktion), color = id) - this Eine einfache Instanz würde eine willkürliche numerische Codierung Ihrer Aktionszustände verwenden. Idealerweise bereichern Sie Ihre Frage etwas, wie von @Sotos vorgeschlagen – CMichael

Antwort

1

Sie müssen id von numerischen auf einen Faktor konvertieren, und bestellen dann diese Faktoren durch, was auch immer Metrik, die Sie interessieren. Hier habe ich dplyr verwendet, um eine data.frame zu schaffen genannt forSort, die die IDs und einen Satz hält von Dinge, die Sie wollen sortieren:

forSort <- 
    testDF %>% 
    group_by(id) %>% 
    summarise(n = n() 
      , max = max(relative_timestamp)) 

forSort 

#  id  n max 
# 1  0 12 244753 
# 2  1 85 447680 
# 3  2 22 156005 

nach Anzahl der Aktionen:

ggplot(testDF %>% 
     mutate(id = factor(id, levels = forSort$id[order(forSort$n)])) 
     , aes(x=relative_timestamp 
      , y= id 
      , color=action)) + 
    geom_point() 

enter image description here

Zeitliches Letzte Aktion:

ggplot(testDF %>% 
     mutate(id = factor(id, levels = forSort$id[order(forSort$max)])) 
     , aes(x=relative_timestamp 
      , y= id 
      , color=action)) + 
    geom_point() 

enter image description here

Verwandte Themen