2016-03-24 12 views
1

ich mich umsah habe aber gefunden haben, nicht eine Lösung, die ganz mein Problem passt.Berechnung Monatsmittelwerte in R mit einer großen Datenmenge mehrjährigen

Ich habe einen Datensatz (DF1) mit täglichem Fluss Flüssen von 1945 bis 1981 - so ist es eine sehr große Datenmenge.

Ich mag die durchschnittliche Fließ für jeden Monat berechnen, jedes Jahr. Ich kann dies in Excel tun Pivot-Tabellen verwenden, aber ich frage mich, ob es viel weniger umständlich in R. wäre

Mein Problem ist zweifach. Zum einen habe ich Probleme, die Daten zu einem aktuellen Datumsformat (trotz aller Bemühungen empfohlenen Code) und andererseits im Gespräch, wenn ich das Datum sortiert haben, ich bin nicht sicher, wie für jedes Jahr im Datensatz Monatsmittelwerte aggregieren. Ich bin ziemlich neu in R - Ich habe nachgeschlagen Tutorials, wo möglich, aber dieses spezielle Problem scheint nicht eine leicht zu finden Lösung.

So sieht meine Daten wie folgt aus:

  X1 X2 
1 01/10/1945 0.835 
2 02/10/1945 0.835 
3 03/10/1945 0.835 
4 04/10/1945 0.835 
5 05/10/1945 0.835 
6 06/10/1945 0.433 

Das Datum ist anfänglich Zeichenformat, also verwende ich den Code

df1$X1<-as.Date(df1$X1,"%m/%d/%Y") 

Um zu versuchen, es Format auf dem Laufenden zu konvertieren, aber aus irgendeinem Grunde hält es mucking mit mehreren Lücken in den Terminen:

8132 1968-05-01 4.163 
8133 1968-06-01 4.134 
8134 1968-07-01 1.464 
8135 1968-08-01 1.682 
8136 1968-09-01 1.036 
8137 1968-10-01 0.564 
8138 1968-11-01 0.575 
8139 1968-12-01 0.547 
8140  <NA> 10.590 
8141  <NA> 16.760 
8142  <NA> 3.879 
8143  <NA> 11.410 

Die Termine in Sätzen von 12 angezeigt werden, so Ich nehme an, das Problem bezieht sich auf einige Verwirrung mit "Monaten", aber ich habe ein paar verschiedene Kombinationen von d/m/Y versucht und keiner von ihnen funktioniert.

So zusammenzufassen,

  • Wie kann ich konvertieren Daten mehrere Jahre in ein Datumsformat ohne R Spanning verwechselt immer?
  • Sobald die Daten sortiert werden, wie kann ich produzieren Monatsmittelwerte, wenn meine Daten mehrere Jahre erstreckt?

Vielen Dank,

I

+0

Können Sie die Zeichenketten zeigen, dass die 'NA' generieren? – cdeterman

+2

Beachten Sie, dass 'as.Date (" 13/10/1945 ","% m /% d /% Y ")" NA "zurückgeben würde. Ist es möglich, dass Ihre Daten nach '% d /% m /% Y' formatiert sind? – coffeinjunky

Antwort

2

Ich empfehle Lubridate zu verwenden, um Ihre Daten zu konvertieren, und dplyr Ihre Datenrahmen zu manipulieren. Wenn Sie Ihre Daten betrachten, scheinen Ihre Daten im Format Tag/Monat/Jahr zu liegen (dmy with Lubridate).

Angenommen, Ihre Datenrahmen wird df genannt:

library(dplyr) 
library(lubridate) 

df <- mutate(df, X1 = dmy(X1),Year = year(X1), Month = month(X1)) 
df <- group_by(df, Month, Year) 
df <- summarise(df, result = mean(X2)) 

Sie auch diese Befehle Kette kann es kürzer zu machen:

df <- df %>% 
    mitigate(X1 = dmy(X1),Year = year(X1), Month = month(X1)) %>% 
    group_by(Month, Year) %>% 
    summarise(result = mean(X2)) 

Hoffnung, das hilft.

+0

Gerade geschafft, dies im Büro zu versuchen. Es scheint perfekt zu funktionieren; Indem ich diesen Code durchsetze, konvertiere ich den CSV in genau das, was ich brauche. Vielen Dank - Sie haben mir mehrere Stunden geschont, als ich an Pivot-Tischen herumhantierte! –

1

Betrachten Basisfunktion, aggregate() nach Datum Konvertierung:

df$X1 <- as.POSIXct(strptime(df$X1, "%m/%d/%Y")) # US BASED SHORT DATES 
df$X1 <- as.POSIXct(strptime(df$X1, "%d/%m/%Y")) # NON-US BASED SHORT DATES 

df$month <- as.numeric(format(df$X1, '%m')) 
df$year <- as.numeric(format(df$X1, '%Y')) 

aggdf <- aggregate(X2 ~ month + year, df, FUN=mean) 
Verwandte Themen