2017-05-20 8 views
1

Intro anfügen:ein Vektor zusammenfassen und dann die zusammenfassenden Statistiken zur ursprünglichen Datenrahmen in R

Ich mag den Mittelwert berechnen, die Standardabweichung und Standardfehler eines numerischen Vektors in einem bestimmten Datenrahmen und dann Erstellen Sie drei neue Vektoren mit diesen zusammenfassenden Statistiken. Ich muss sie dann mit dem ursprünglichen Datenrahmen kombinieren.

Beispielcode:

## Creating our dataframe: 
datetime <- c("5/12/2017 16:15:00","5/16/2017 16:45:00","5/19/2017 17:00:00") 
datetime <- as.POSIXct(datetime, format = "%m/%d/%Y %H:%M:%S") 
values <- c(1,2,3) 
df <- data.frame(datetime, values) 

## Here's the current output: 
head(df) 
      datetime values 
1 2017-05-12 16:15:00  1 
2 2017-05-16 16:45:00  2 
3 2017-05-19 17:00:00  3 

## And here's the desired output: 
head(df1) 
      datetime values mean sd se 
1 2017-05-12 16:15:00  1 2 0.816 0.471 
2 2017-05-16 16:45:00  2 2 0.816 0.471 
3 2017-05-19 17:00:00  3 2 0.816 0.471 

Vielen Dank im Voraus!

Für diejenigen, die neugierig sind, warum ich versuche, dies zu tun, folge ich diesem tutorial. Ich muss für einige Kalibrierungen zwischen einem kostengünstigen Sensor und einem teuren Referenzinstrument einen dieser Liniendiagramme mit Fehlerbalken erstellen.

+1

Erstellen Sie die neue Spalte und weisen Sie den Mittelwert wie folgt an: 'df $ mean <- mean (df $ values)'. Folgen Sie der gleichen Prozedur für 'sd' und die letzte Spalte –

+0

Wow, das war zu einfach, danke! Ich hätte es besser wissen müssen ... Ich war fest daran, herauszufinden, wie man das mit dplyr ... – spacedSparking

+1

alternativ: 'sd0 <- Funktion (x) {sd (x)/sqrt (Länge (x)) * sqrt (Länge (x) - 1)}; se0 <- Funktion (x) {sd0 (x)/sqrt (Länge (x))}; df2 [c ('mean', 'se', 'sd')] <- lapply (liste (mean, se0, sd0), funktion (f) f (df $ werte)) ' – mt1022

Antwort

2

Sie können die Zuweisung gleichzeitig durchführen. Angenommen, Sie haben bereits die Helferfunktion für Sie Wahl von sd und se:

sd0 <- function(x){sd(x)/sqrt(length(x)) * sqrt(length(x) - 1)} 
se0 <- function(x){ sd0(x)/sqrt(length(x))} 

Dann können Sie versuchen:

df[c('mean', 'sd', 'se')] <- lapply(list(mean, sd0, se0), function(f) f(df$values)) 
# > df 
#    datetime values mean  sd  se 
# 1 2017-05-12 16:15:00  1 2 0.8164966 0.4714045 
# 2 2017-05-16 16:45:00  2 2 0.8164966 0.4714045 
# 3 2017-05-19 17:00:00  3 2 0.8164966 0.4714045 
+0

Das funktioniert super! Vielen Dank! – spacedSparking

+0

@spacedSparking, aus Neugier, warum Sie eine voreingenommene Schätzung anstelle der Standard "sd" in R. – mt1022

+1

Das ist eine gute Frage ... Ich bekomme leicht unterschiedliche Zahlen zwischen 'df $ sd <- sd (df $ Werte) 'und die' sd0'-Funktion. Ich sehe "1" gegen "0,81" für sd, und "0,57" und "0,47" für se ... Es scheint, dass die 'sd()' Funktion die Standardabweichung der Probe liefert, während die 'sd0()' Funktion liefert die Standardabweichung der Bevölkerung ... Klingt das richtig? – spacedSparking

1

Hier ist die dplyr Lösung, mit sd0 und se0 gegeben in mt1022 ‚s Antwort :

df %>% mutate("mean"=mean(values),"sd"=sd0(values),"se"=se0(values)) 
+0

Das ist genial. Danke für das Teilen! – spacedSparking

Verwandte Themen