2016-06-30 12 views
1

Ich habe einen Datensatz für die Fällung in den USA, die durch unterteilt: Staat, Kreis (innerhalb Zustand), Jahr und Monat. Der Rekord geht zurück auf 1895.Loops für mehrere bedingte Untergruppen in R

Ich versuche, den 121 Jahre Durchschnitt (1895 - heute) zu extrahieren, für jeden Bezirk in jedem Zustand von Monat. Offensichtlich könnte man das durch Teilen und/oder Subsetting tun, aber ich möchte nicht immer wieder dieselbe grundlegende Codezeile schreiben. Was ich tun möchte, ist eine Schleife, die die Daten nach Staat, Distrikt und Monat durcharbeitet, wobei der 121-jährige Durchschnitt für jedes der 12 Monate wiedergegeben wird - dh: alabama, district 01, jan-wyoming, district 10, dez .

Dies ist die erste und letzte Zeile der Datentabelle:

state, district, year, Jan, Feb, Mar, Apr, May, June, July, Aug, Sept, Oct, Nov, Dec 
01, 01 1895 7.37 1.41 7.17 2.72 3.06 4.04 4.58 4.00 3.41 2.28 1.83 5.83 

... 

50, 13, 2016, 4.77, 3.02, 3.28, -9.99, -9.99, -9.99, -9.99, -9.99, -9.99, -9.99, -9.99, -9.99 

Jede Anregung/Hilfe in dieser Hinsicht würde sehr geschätzt werden. Vielen Dank!

+0

Sie fehlen einige Kommas verwenden. – alistaire

+0

'Bibliothek (tidyr); Bibliothek (dplyr); df%>% sammeln (Monat, Wert, Jan: Dez)%>% group_by (Bundesland, Bezirk, Monat)%>% zusammenfassen (Durchschnitt = Mittelwert (Wert)) 'oder Basis- oder Datentabellenäquivalente – alistaire

+0

Keine Schleifen sind erforderlich . Ein einfaches Aggregat kann funktionieren: 'meandf <- aggregate (. ~ State + district, sourcuredf, FUN = mean)' – Parfait

Antwort

1

Wir data.table

library(data.table) 
melt(setDT(df), id.var = c('state', 'district', 'year'), 
    variable.name= 'month')[, .(avg = mean(value)) ,.(state, district, month)]