2017-08-31 3 views
1

Ich habe mehrere verschiedene Methoden ausprobiert, um eine Übersichtstabelle der Durchschnittswerte um eine halbe Stunde zu erhalten, ähnlich einer durchschnittlichen Pivot-Tabelle. Meine bevorzugte Methode ist Aggregat, aber ich scheine nur einen Durchschnitt für die obere Reihe zu bekommen.R, Aggregat-Summierung über alle Werte in der Referenzspalte (statt nur einem)

Daten sind wie in der Verbindung, wo die Gruppe und die Nachrichten ignoriert werden können. See below.

Der Code Ich verwende ist ...

Data <- read_csv("P:/Book3.csv", col_types = cols(Date = col_date(format = "%m/%d/%Y"), 
                Time = col_time(format = "%H:%M:%S"))) 
View(Data) 

class(Data) 
[1] "tbl_df"  "tbl"  "data.frame" 

aggregate(Data[, 3:4], list(Data$Time), mean) 

    Group.1 Calls Estimated_Calls 
1 08:30:00 15.38889  14.55556 

Sie werden die einzige Zeile bemerken, sondern im Idealfall würde die Ausgabe für jedes Mal, mittelt haben.

Jede Hilfe wäre großartig. Vielen Dank.

+0

Wir können 'summarise_all',' summarise_at' oder 'summarise_if' mit' group_by' verwenden, um die Daten von 'dplyr' zu aggregieren. Wenn Sie die 'Book3.csv' teilen können, können wir Ihnen wahrscheinlich zeigen, wie Sie dies tun. – www

+0

Es ist immer besser, Ihre Daten anstelle eines Bildes der Daten zu verwenden. Probiere 'dput (Data)' und bearbeite deine Frage, um die Ausgabe dieses Befehls einzuschließen. – lebelinoz

Antwort

0

Ich mag die dplyr Bibliothek für Pro verwenden bleme dieser Art:

library(dplyr) 
Data %>% group_by(Time) %>% 
    summarise(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)) 

Ich finde das Rohr %>% Code leichter zu lesen macht (wenn man sich daran gewöhnen). Dies ist eine Funktion der Bibliothek dplyr.

+1

Das hat funktioniert. Vielen Dank! – Lindon

0

Ich ziehe data.table für Zusammenfassung Operationen wie folgt zu verwenden:

setDT(Data) 

Data[, .(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)), 
    by=.(Group, Time)] 

Dies wird Gruppe von Gruppe und Zeit, so dass Sie für jede Kombination von Gruppe und Zeit eine Zeile haben werden.

mit Dummy-Daten (3 verwendete "Stunden" für die Zeit, verändert auch by zu keyby sortieren):

set.seed(48) 

df1 <- data.table(Group = sample(LETTERS[1:3],10,T), 
Time = sample(1:3,10,T), 
Calls = sample(1:50,10,T), 
Estimated_Calls = sample(1:50,10,T)) 

df1[, .(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)), 
     keyby=.(Group, Time)] 

Output:

Group Time Mean_Calls Mean_Est_Calls 
1:  A 2 27.00000  22.00000 
2:  A 3 34.66667  25.66667 
3:  B 2 26.00000  6.50000 
4:  B 3 20.00000  1.00000 
5:  C 2 35.50000  32.00000 

Mit aggregate:

df2 <- aggregate(df1[,3:4], by=with(df1,list(Group,Time)),mean) 
+0

Vielen Dank. Ich hätte das benutzt, aber hatte einige Probleme damit, das data.table-Paket korrekt zu installieren (installiert, aber scheint nie die Funktion zu finden). Im Internet zu suchen, scheint dies ein häufiges Problem zu sein. Das ist aber toll zu wissen! – Lindon

Verwandte Themen