2016-12-19 7 views
-3

Ich brauche Hilfe Gruppierung und Zusammenfassung eines Datenrahmens bitte. Ich habe eine Reihe von möglichen Antworten durchgesehen, aber ich habe nichts gefunden, was mich dort hinbringt.Zusammenfassen Datenrahmen in r

Ich habe einen Datenrahmen ähnlich dem folgenden:

structure(list(Country = structure(c(3L, 2L, 1L, 3L, 3L, 2L), 
            .Label = c("CA", "MX", "US"), class = "factor"), 
       var1 = c(1L, 1L, 0L, 1L, 0L, 1L), 
       var2 = c(1L, 1L, 1L, 1L, 1L, 0L)), 
      .Names = c("Country", "var1", "var2"), class = "data.frame", 
      row.names = c(NA, -6L)) 

Country var1 var2 
    US    1    1 
    MX    1    1 
    CA    0    1 
    US    1    1 
    US    0    1 
    MX    1    0 

Ich brauche die Daten nach Land mit ein paar Statistiken zusammenzufassen. Ich brauche eine Gesamtanzahl von Reihen für das Land und eine Summe von jedem var. Zum Beispiel:

Country Frequency Sum.var1 Sum.var2 
    US     3       2      3 
    MX     2       2      1 
    CA     1       0      1 
+3

Was genau haben Sie versucht und hat es "Sie nicht dorthin gebracht"? Bitte klären Sie genau, wo Sie Probleme haben. Mache diesen Klang eher zu einer Frage als zu einer Bitte um jemanden, der es einfach für dich tut. – MrFlick

+2

Werfen Sie einen Blick auf reshape2, genauer gesagt auf die Familie der "Cast" -Funktionen: https://cran.r-project.org/web/packages/reshape2/reshape2.pdf – user443854

+1

Sie sollten Daten in einem Formular, das kopiert werden kann, veröffentlichen in eine Konsolensitzung. –

Antwort

1

mit dplyr Paket

df <- df %>% group_by(Country) %>% 
    summarise(Frequency=n(), Sum_var1=sum(var1), Sum_var2=sum(var2)) 
+1

Danke! Dies funktionierte perfekt und war genau das, wonach ich suchte. – BStepp

1

Die Aggregatfunktion können Sie die Ergebnisse geben Sie suchen. Ich würde den folgenden Aufruf verwenden:

aggregate(df, df["Country"], 
      function(x) ifelse(is.numeric(x), sum(x), length(x))) 

Was es tut:

  1. df das erste Argument ist die Daten, die Sie, so dass nur Ihre ursprünglichen Datenrahmen zusammenzufassen versuchen.
  2. df["Country"] gibt die Gruppen an, die Sie zum Zusammenfassen Ihres Datenrahmens verwenden möchten, in diesem Fall die Länder-IDs.
  3. function(x) ... Dies definiert eine benutzerdefinierte Funktion, die auf jede Spalte von df mit den durch df["Country"] definierten Gruppen angewendet wird. Hier verwenden wir einen ifelse() Aufruf, so dass für die var Felder (die numerisch sind) wir eine andere Funktion als für das Country Feld verwenden. sum(), die auf die var Felder angewendet wird, wird nach Land, wo als length() die Anzahl der Vorkommen für jedes Land erhalten.