Berechnen von Daten.frame-Spalte Durchschnittswerte nach Datum
Ich habe einen Daten.frame in R, wo eine Spalte ist eine Liste von Terminen (viele Duplikate), während die andere Spalte ist eine Temperatur aufgezeichnet, auf dass Datum. Die Spalten in Frage, die wie folgt Aussehen (aber mehrere tausend Zeilen und ein paar andere unnötige cols):
Date | Temp
-----------------
1/2/13 34.4
1/2/13 36.4
1/2/13 34.3
1/4/13 45.6
1/4/13 33.5
1/5/13 45.2
Muss ich einen Weg finden, sich einen täglichen Mittelwert für die Temperatur. Also ideal, ich könnte sagen, R, um die Schleife durch die Daten.frame und für jedes Datum, das aufeinander abgestimmt ist, geben Sie mir einen Durchschnittswert für die Temperatur an diesem Tag. Ich habe schon gegoogelt und ich weiß, Schlaufen in R möglich sind, aber ich kann nicht umbrochen, mein Kopf herum diese konzeptionell gegeben, was wenig ich weiß, über R-code.
Ich weiß, ich kann das herausziehen einer einzelnen Spalte und die Durchschnittliche (d.h. mean(data.frame[[2]])
), aber ich bin völlig verloren, wie Sie sagen, R, um zu entsprechen, dass bedeutet, dass, um einen einzigen Wert in der ersten Spalte.
Außerdem, wie könnte ich generieren, im Durchschnitt alle sieben Kalendertage (unabhängig davon, wie viele Einträge vorhanden sind, für einen einzigen Tag)? So, ein sieben Tage-Durchschnitt, d.h. wenn mein date Angebot beginnt am 1/1/13 ich würde einen Durchschnitt für alle temps zwischen 1/1/13 und 1/7/13, und dann zwischen 1/8/13 und 1/15/13 und so weiter...
Jede Hilfe hilft mir begreifen, R-loops ist sehr geschätzt. Danke!!!
BEARBEITEN
Hier ist die Ausgabe von dput(head(my.dataframe))
BITTE BEACHTEN Sie: ich bearbeitet, die sich beide "Datum" und "timestamp", weil Sie beide gehen für mehrere tausend Einträge ansonsten:
structure(list(RECID = 579:584, SITEID = c(101L, 101L, 101L,
101L, 101L, 101L), MONTH = c(6L, 6L, 6L, 6L, 6L, 6L), DAY = c(7L,
7L, 7L, 7L, 7L, 7L), DATE = structure(c(34L, 34L, 34L, 34L, 34L,
34L), .Label = c("10/1/2013", "10/10/2013", "10/11/2013", "10/12/2013",
"10/2/2013", "10/3/2013", "10/4/2013", "10/5/2013", "10/6/2013",
"10/7/2013", "10/8/2013", "10/9/2013", "6/10/2013", "6/11/2013","9/9/2013"), class = "factor"), TIMESTAMP = structure(784:789, .Label = c("10/1/2013 0:00",
"10/1/2013 1:00", "10/1/2013 10:00", "10/1/2013 11:00", "10/1/2013 12:00",
"10/1/2013 13:00", "10/1/2013 14:00", "10/1/2013 15:00", "10/1/2013 16:00",
"10/1/2013 17:00", "10/1/2013 18:00", "10/1/2013 19:00", "10/1/2013 2:00"), class = "factor"), TEMP = c(23.376, 23.376, 23.833, 24.146,
24.219, 24.05), X.C = c(NA, NA, NA, NA, NA, NA)), .Names = c("RECID",
"SITEID", "MONTH", "DAY", "DATE", "TIMESTAMP", "TEMP", "X.C"), row.names = c(NA,
6L), class = "data.frame")
- Dass
dput
sieht nichts, wie die sample-Daten! - 'generieren der Durchschnitt für alle 7 Kalender-Tage': meinst du 'Durchschnitt-von-Woche-des-Jahres" , oder 'gleitenden 7-Tage-Durchschnitt'?
- Beachten Sie auch, dass R ist case-sensitive.
Date
ist nicht das gleiche wieDATE
. - Die Ausgabe von
dput(head(my.dataframe), n=20)
oder was auch immer ist in Ordnung. - Ich habe meine täglichen Durchschnitt, nachdem ich herausgefunden habe, die Kleinschreibung bit. 🙂 Ich bin jetzt nachdenken Durchschnitt... ich werde die Frage Bearbeiten, aber @smci, siehe mein Kommentar an Sie.
- das ist eigentlich eine ganz andere Frage, aber mein Tipp steht: Blick auf die "xts" - Paket.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein einfaches Beispiel der Split-Anwenden-Kombinieren Paradigma.
Alternative #1 als Ananda Mahto erwähnt,
dplyr
Paket ist eine höhere performance neuplyr
. Er zeigt die syntax.Alternative #2:
aggregate()
ist auch funktionell gleichwertig, hat halt weniger Glocken-und-Pfeifen alsplyr/dplyr
.Zusätzlich " erzeugen Durchschnitt für alle 7 Kalendertagen: meinst du 'Durchschnitt-von-Woche-des-Jahres', oder 'gleitenden 7-Tage-Durchschnitt (trailing/leading/zentriert)'?
plyr
und springen direkt zudplyr
. Sauberer syntax, eine viel bessere Leistung, neuer code, schöner idiom, mehr erweiterbar. Vertrauen Sie mir auf diesem.Hier sind ein paar Optionen:
Da Sie den Umgang mit Terminen ist, sollten Sie erkunden die
xts
- Paket, das Ihnen Zugriff auf Funktionen wieapply.daily
,apply.weekly
,apply.monthly
und so weiter, das können Sie bequem sammeln von Daten.dput(head(your.actual.data.frame.name))
. Es wird Aussehen wie einstructure(....)
mit einer Menge Zeug statt der....
. Beitrag, die uns helfen wird, uns besser beheben.