2016-10-05 3 views
0

Ich habe ein data.frame in R, das Alter, Längen und die Gesamtzahl der Personen innerhalb jeder Längengruppe enthält. Ich möchte mittlere und Standardabweichung der Längen für jede Altersgruppe erhalten, und ich fühle, dass das mit dplyr am einfachsten sein wird. Wie auch immer, ich kann nicht herausfinden, wie man diesen bestimmten Datensatz angehen kann. Hier die Daten:Verwenden von Sammeln auf einem bereits gesammelten data.frame in R

dat <- data.frame(age = sort(rep(1:5, 5)), 
       length = c(6:10, 8:12, 10:14, 12:16, 14:18), 
       total = sample(25:50, 50, replace=T)) 

, die wie folgt aussieht:

age length total 
    1  6 38 
    1  7 42 
    1  8 49 
    1  9 28 
    1  10 26 
    2  8 37 

Und ich will es die folgenden so aussehen, dass ich kann leicht group_by(age) %>% summarize(mean = mean(length), sd = sd(length)).

age length 
1  6 
1  6 
1  6 
1  6 
1  6 

usw. (d. H. Es sollte 38 6s für Alter 1, 42 7s für Alter 1 und so weiter).

Wie erreiche ich das mit der gather() Funktion von tidyr? Ich kann es anscheinend nicht schaffen. Freut mich, alternative Vorschläge zu hören.

Antwort

1

Wie berechnet man stattdessen das gewichtete Mittel?

dat <- data.frame(age = sort(rep(1:5, 5)), 
        length = c(6:10, 8:12, 10:14, 12:16, 14:18), 
        total = sample(25:50, 50, replace=T)) 
library(magrittr) 
library(dplyr) 

dat %>% 
    group_by(age) %>% 
    summarise(mean_length = sum(length * total)/sum(total), 
      wtd_mean = weighted.mean(length, total)) 

EDIT: es fiel mir ein, nach früheren Posting, dass R eine weighted.mean Funktion hat, die dies noch einfacher macht.

+0

Ich hatte so etwas gemacht, aber es wird ein bisschen haariger bei der Berechnung der Standardabweichung. : | – PaulFrater

+0

Siehe '? Hmisc :: wtd.var'. 'Hmisc' hat auch eine' wtd.quantile', wenn Sie nichtparametrische Messungen durchführen. – Benjamin

Verwandte Themen