Variable Ergebnisse mit dplyr summieren, abhängig von der Benennung der Ausgabevariablen
Ich benutze dasdplyr
package dplyr
0,4,3; R 3.2.3) für eine grundlegende Zusammenfassung der gruppierten Daten summarise
), aber inkonsistente Ergebnisse erhalten (NaN für 'sd' und falsche Anzahl für 'N "). Das Ändern des" Namens "der Ausgabe hat variable Auswirkungen (Beispiele unten).
Zusammenfassung der bisherigen Ergebnisse:
plyr
Paket ist nicht geladen, was meines Wissens Probleme mit @ verursachen könndplyr
wenn zuerst geladen.Gleiche Ergebnisse mit oder ohne NA-Daten (nicht gezeigt).Problem kann durch Verwendung der camelCase-Variablenbezeichnung (nicht gezeigt) oder durch Verwendung einer Ausgabevariablen ohne nicht-alphanumerisches Trennzeichen im Namen behoben werden. Je nach Kombination von "." oder "_" in den Namen der Ausgabespalten.Frage Obwohl dieses Problem behoben werden kann, verstoße ich gegen eine grundlegende Benennungsregel für Variablen, gegen die ich verstoße, oder gibt es ein Programmproblem, das behoben werden muss? Ich habe andere Fragen mit variablem Verhalten mit zusammenfassen gesehen, aber nicht ganz so.
ielen Dank, Ma
Beispieldaten:
library(dplyr)
df<-data_frame(id=c(1,1,1,2,2,2,3,3,3),
time=rep(1:3, 3),
glucose=c(90,150, 200,
100,150,200,
80,100,150))
Beispiel: sd gibt NaN und ungenaues n
df %>% group_by(time) %>%
summarise(glucose=mean(glucose, na.rm=TRUE),
glucose.sd=sd(glucose, na.rm=TRUE),
n=sum(!is.na(glucose)))
time glucose glucose.sd n
(int) (dbl) (dbl) (int)
1 1 90.0000 NaN 1
2 2 133.3333 NaN 1
3 3 183.3333 NaN 1
Ich habe mich gefragt, ob es ein Problem mit der Verwendung von "." im Namen oder unter Verwendung des gleichen Namens wie im Datenrahmen. Das Entfernen vorhandener df-Spaltennamen aus der Ausgabe behebt dieses
df %>% group_by(time) %>%
summarise(avg=mean(glucose, na.rm=TRUE),
stdv=sd(glucose, na.rm=TRUE),
n=sum(!is.na(glucose)))
time avg stdv n
(int) (dbl) (dbl) (int)
1 1 90.0000 10.00000 3
2 2 133.3333 28.86751 3
3 3 183.3333 28.86751 3
Das Entfernen der "Glucose" -Zusammenfassung behebt das Problem, obwohl "glucose.sd" übrig bleibt. Beispiel: Nach dem Entfernen von "glucose" ist das Ergebnis OK.
df %>% group_by(time) %>%
summarise(glucose.sd=sd(glucose, na.rm=TRUE),
n=sum(!is.na(glucose)))
time glucose.sd n
(int) (dbl) (int)
1 1 10.00000 3
2 2 28.86751 3
3 3 28.86751 3
Wenn ich "glucose.mean" für die erste Zusammenfassung hinzufüge, funktioniert es gut
df %>% group_by(time) %>%
summarise(glucose.mean=mean(glucose, na.rm=TRUE),
glucose.sd=sd(glucose, na.rm=TRUE),
n=sum(!is.na(glucose)))
time glucose.mean glucose.sd n
(int) (dbl) (dbl) (int)
1 1 90.0000 10.00000 3
2 2 133.3333 28.86751 3
3 3 183.3333 28.86751 3
Gleicher Fehler bei Verwendung eines Variablennamens ohne "." Es ist also nicht nur ein Problem bei der Verwendung von "." im Namen
df %>% group_by(time) %>%
summarise(glucose=mean(glucose, na.rm=TRUE),
glucose_sd=sd(glucose, na.rm=TRUE),
n=sum(!is.na(glucose)))
time glucose glucose_sd n
(int) (dbl) (dbl) (int)
1 1 90.0000 NaN 1
2 2 133.3333 NaN 1
3 3 183.3333 NaN 1
Renaming "Glucose" zu "Glucose_mean" funktioniert
df %>% group_by(time) %>%
summarise(glucose_mean=mean(glucose, na.rm=TRUE),
glucose_sd=sd(glucose, na.rm=TRUE),
n=sum(!is.na(glucose)))
time glucose_mean glucose_sd n
(int) (dbl) (dbl) (int)
1 1 90.0000 10.00000 3
2 2 133.3333 28.86751 3
3 3 183.3333 28.86751 3