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önndplyrwenn 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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage