2017-05-19 4 views
1

Nach umfangreicher Suche zu diesem Thema kann ich immer noch nicht die Lösung finden. Ich habe einen einfachen Datenrahmen mit 43 Reihen und 2 Spalten. Meine erste Spalte enthält zwei Daten. Das erste Datum wird 19 Mal und das andere 24 Mal gedruckt. Die zweite Spalte ist Temperatur. Ich möchte die Maximal- und Minimaltemperatur nach Datum finden, aber mein Code druckt die Max- und Min-Werte des gesamten Datensatzes.group_by Datum Spalte in dplyr

Daten:

Date <- c(rep(x = "2017-05-18", each= 19), rep(x = "2017-05-19", each= 24)) 


Temperature_F <- c(35, 35, 42, 49, 57, 63, 64, 67, 70, 71, 72, 71, 72, 70, 66, 61, 57, 54, 50, 49, 45, 44, 44, 42, 40, 39, 47, 53, 61, 67, 69, 
    72, 75, 76, 77, 76, 77, 75, 71, 66, 62, 58, 54) 

NWS_temps1 <- data.frame(Date, Temperature_F) 

Hier ist mein dplyr Code, den mir den max und min für die gesamte Temperatursäule hält zu geben, wenn ich denke, es sollte mir die Maximal- und Minimaltemperatur von Datum geben.

NWS_temps1 <- tbl_df(NWS_temps1) 

NWS_temps1 %>% 
    group_by(Date) %>% 
    summarise(Tmax = max(Temperature_F), Tmin= min(Temperature_F)) 

Der Ausgang ich erhalte, ist:

Tmax Tmin 
    77 35 

Als ich bin der Hoffnung:

Date  Tmax Tmin 
2017-05-18 72 35 
2017-05-19 77 39 

Ich verstehe nicht, warum Datum nicht gruppiert werden, wie es sollte. Ich habe versucht, Datum zu einem Faktor zu ändern, wie es hier ist, Charakter, Datum Objekt und sogar POSIXct, aber mein Ergebnis ist immer der gesamte Datenrahmen max und min.

Jede Hilfe wird sehr geschätzt.

Danke.

+1

Verwenden 'group_by', nicht' group_by_', mit der für Standardauswertung ist. – www

+0

Das war ein Fehler meinerseits, da ich group_by ausprobiert habe. Sowohl group_by als auch group_by_ erzeugen das gleiche Ergebnis:/ – user3720887

+1

Ich habe Ihren Code getestet und ersetze die 'group_by_' mit' group_by'. Es funktionierte. – www

Antwort

1

Sieht aus wie Sie die Standard-Testversion group_by_() anstelle der NSE Version group_by() verwenden. Probieren Sie es ohne Unterstrich:

NWS_temps1 %>% 
    group_by(Date) %>% 
    summarise(Tmax = max(Temperature_F), Tmin= min(Temperature_F)) 

#> # A tibble: 2 x 3 
#>   Date Tmax Tmin 
#>  <chr> <dbl> <dbl> 
#> 1 2017-05-18 72 35 
#> 2 2017-05-19 77 39 
+0

Das ist interessant. Ich habe beide ausprobiert und bekomme immer das gleiche Ergebnis. Ich bin überrascht, dass deine Arbeit funktioniert hat. Ich werde versuchen, meine R-Sitzung zu schließen und wieder zu öffnen. Keine Ahnung, warum das nicht funktioniert. – user3720887

1
NWS_temps1 %>% 
group_by(as.character(Date)) %>% 
summarise(Tmax = max(Temperature_F), Tmin= min(Temperature_F)) 
+1

'as.character' ist nicht notwendig – www

1

Die bauseitigen Antworten dplyr mit funktionieren sollte. Wenn jedoch aus bestimmten Gründen dplyr nicht funktioniert. Hier ist eine Lösung tapply von der Basis R.

dt <- data.frame(Date = unique(NWS_temps1$Date), 
       Tmax = tapply(NWS_temps1$Temperature_F, NWS_temps1$Date, FUN = max), 
       Tmin = tapply(NWS_temps1$Temperature_F, NWS_temps1$Date, FUN = min)) 
+0

danke, ich werde dies als Referenz für die Zukunft behalten! – user3720887

Verwandte Themen