Daten auswählen und Mittelwert berechnen lassen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
FledermausR
Beiträge: 21
Registriert: Fr Mär 23, 2018 11:24 am

Daten auswählen und Mittelwert berechnen lassen

Beitrag von FledermausR »

Hallo,
ich stehe von einem Problem, das wahrscheinlich gar nicht so schwierig ist, ich aber nicht weiß, wie ich es anpacken soll.
Ich habe folgende Datenreihe über viele Wochen:

Code: Alles auswählen

date_time	  T
2018042800	10.8
2018042801	9.2
2018042802	9.2
2018042803	8.7
2018042804	7.7
2018042805	7.3
2018042806	10.1
...
Dabei ist 2018042800 der 28.04.2018 um 0 Uhr usw. . Ich weiß, dass R das Datum in der Form "2018-04-28" erkennt. Wie muss die Uhrzeit aussehen und viel Wichtiger, wie kriege ich das von diesem Format in das R Format?

Weiterhin: Wie sage ich R, dass ich die Temperatur Mittelwerte eines jeden Tages vom 01.12.2018 - 15.03.2019 zwischen 21 und 5 Uhr brauche (also die Temperatur Mittelwerte einer jeden Nacht?

Ich bin Euch sehr Dankbar über jede Hilfe.
LG
Bianca
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Daten auswählen und Mittelwert berechnen lassen

Beitrag von Athomas »

Ich gehe davon aus, dass "date_time" numerisch ist und Zeitzonen bzw. die Unterscheidung Sommer-/Winterzeit für Dich nicht interessant ist!?

Du bist jetzt seit über 1,5 Jahren in diesem Forum registriert - hast Du Dir schon mal [url]http://forum.r-statistik.de/viewtopic.php?f=20&t=11[/url] angeschaut?
FledermausR
Beiträge: 21
Registriert: Fr Mär 23, 2018 11:24 am

Re: Daten auswählen und Mittelwert berechnen lassen

Beitrag von FledermausR »

Hallo Athomas,
richtig, ist numerisch und sommer/winterzeit interessiert mich hierbei nicht.
Die Seite hatte ich mir bisher noch nicht angeschaut. Viele Informationen, die darin stehen waren mir allerdings vorher schon bewusst, und ich finde nicht, dass mir das bei der Lösung meines Problems hilft.
Ich bin zwar schon seit 1,5 Jahren hier angemeldet, bin aber die meiste Zeit im Feld und deshalb längst nicht so aktiv / erfahren wie man es erwarten würde wenn man seit 1,5 Jahren in einem Forum unterwegs ist.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten auswählen und Mittelwert berechnen lassen

Beitrag von jogo »

Hallo Bianca,
FledermausR hat geschrieben: Fr Nov 01, 2019 1:53 pm Die Seite hatte ich mir bisher noch nicht angeschaut ... und ich finde nicht, dass mir das bei der Lösung meines Problems hilft.
das glaube ich schon, dass es Dir nicht hilft bei der Lösung Deines Problems, aber es hilft uns bei der Lösung Deines Problems.
Ich finde das Problem recht interessant und würde mich auch ernsthaft damit befassen, wenn ich nur Daten von wenigstens zwei aufeinander folgenden Tagen hätte. ... am liebsten in einer reproduzierbaren Form, so dass man nicht rätseln muss, ob in der Spalte date_time Zeichenketten oder Faktorlevels sind.

Gruß, Jörg
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Daten auswählen und Mittelwert berechnen lassen

Beitrag von Athomas »

Die Seite hatte ich mir bisher noch nicht angeschaut. Viele Informationen, die darin stehen waren mir allerdings vorher schon bewusst, und ich finde nicht, dass mir das bei der Lösung meines Problems hilft.
Das mag ja sein, aber Du darfst von Zeit zu Zeit auch an Andere denken!

Es wäre für mich ein deutlich größerer Aufwand, erstmal "passendes" Datenmaterial zu erzeugen und dann die Lösung (oder evtl. sogar mehrere Alternativen!) verbal zu beschreiben, als ein kleines Progrämmchen zu schreiben, das - losgelassen auf die von Dir zu liefernden Daten - das tut, was Du erwartest!
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Daten auswählen und Mittelwert berechnen lassen

Beitrag von Athomas »

So, ich habe mir Spielmaterial erzeugt und schlage folgendes vor:

Code: Alles auswählen

#                    >>>> Teil 1: Ausgangslage herstellen

library(data.table)
library(lubridate)

Stunden <- as.vector(outer(0:23, 100*as.integer(gsub("-","",as.character(seq(as.Date("2018/1/1"), by = "day", length.out = 670)))), FUN="+"))
DT      <-data.table(Stunden)            
DT[  , ":="(Uhrzeit=Stunden %% 100, TagImJahr = yday(ymd(Stunden %/% 100)))]
DT[  , Temperatur:= 14 + 16*sin((TagImJahr - 130)/365*2*pi) + 5*sin((Uhrzeit - 11)/24*2*pi) + runif(nrow(DT), -1, 1)]

Ausgangsdaten <- copy(DT[  , .(Stunden, Temperatur)])

#                    >>>> Teil 2: Berechnungen al gusto

Ausgangsdaten[  , ":="(Tag     = ymd(Stunden %/% 100), 
                       Uhrzeit = Stunden %% 100)]
Ausgangsdaten[  , ":="(Bezug   = as_date(ifelse(Uhrzeit <= 6, Tag - 1, Tag)), 
                       Phase   = ifelse(Uhrzeit <=6 | Uhrzeit >= 21, "Nacht", "Tag"))]


BeginnZeitraum <- ymd(20181201)
EndeZeitraum   <- ymd(20190305)

Ergebnis <- Ausgangsdaten[Bezug >= BeginnZeitraum & Bezug <= EndeZeitraum & Phase=="Nacht", .(Nachtdurchschnitt=mean(Temperatur)), by=Bezug]
Dabei benutze ich heftig Features aus den Packages "data.table" und "lubridate" sowie einige Funktionen, die der Anfänger wahrscheinlich nicht kennt - aber es darf ja gefragt werden :) !

Wobei der erste Teil - die Erzeugung des Spielmaterials - zunächst nicht von Interesse sein sollte!
FledermausR
Beiträge: 21
Registriert: Fr Mär 23, 2018 11:24 am

Re: Daten auswählen und Mittelwert berechnen lassen

Beitrag von FledermausR »

Hallo,
entschuldigt bitte vielmals. Ich hatte ein Brett vor dem Kopf :oops: Beim nächsten mal werde ich darauf achten.

Vielen Dank für die Funktion Athomas.
Mit den generierten Daten funktioniert es :D
Leider aber nicht mit meinen Daten :(

Der Datensatz heißt bei mir "climate_WS_Goldberg". Die Spalten habe ich auch "Stunden" und Temperatur" genannt. Nun passiert folgendes

Code: Alles auswählen

climate_WS_Goldberg[  , ":="(Tag     = ymd(Stunden %/% 100),  Uhrzeit = Stunden %% 100)]
#Error in `:=`(Tag = ymd(Stunden%/%100), Uhrzeit = Stunden%%100) : 
#  Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").
habe mir die Informationen zu help(":=") durchgelesen und versucht, den Fehler zu finden. Leider Erfolglos :? .

Wie ist das %/% 100 und %% 100 bei diesem Befehl zu verstehen?

Code: Alles auswählen

Ausgangsdaten[  , ":="(Tag     = ymd(Stunden %/% 100), 
                       Uhrzeit = Stunden %% 100)]
Stimmt an meinem Datensatz etwas nicht?

Code: Alles auswählen

dput(head(Ausgangsdaten,3))
#structure(list(Stunden = c(2018010100, 2018010101, 2018010102
#), Temperatur = c(0.1414413115015, -0.649220332342974, -1.73242527507049
#)), class = c("data.table", "data.frame"), row.names = c(NA, 
#-3L), .internal.selfref = <pointer: 0x0000000006221ef0>)

dput(head(climate_WS_Goldberg,3))
#structure(list(Stunden = c(2018042800, 2018042801, 2018042802
#), Temperatur = c(10.8, 9.2, 9.2)), row.names = c(NA, 3L), class = "data.frame")
Ich würde mich über eine weitere Hilfestellung sehr freuen :) .
LG
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Daten auswählen und Mittelwert berechnen lassen

Beitrag von Athomas »

Stimmt an meinem Datensatz etwas nicht?
dput(head(Ausgangsdaten,3))
#structure(list(Stunden = c(2018010100, 2018010101, 2018010102
#), Temperatur = c(0.1414413115015, -0.649220332342974, -1.73242527507049
#)), class = c("data.table", "data.frame"), row.names = c(NA,
#-3L), .internal.selfref = <pointer: 0x0000000006221ef0>)

dput(head(climate_WS_Goldberg,3))
#structure(list(Stunden = c(2018042800, 2018042801, 2018042802
#), Temperatur = c(10.8, 9.2, 9.2)), row.names = c(NA, 3L), class = "data.frame")
climate_WS_Goldberg ist offenbar keine data.table...
FledermausR
Beiträge: 21
Registriert: Fr Mär 23, 2018 11:24 am

Re: Daten auswählen und Mittelwert berechnen lassen

Beitrag von FledermausR »

Nachdem ich meinen Datensatz mit "as.data.table" umgewandelt habe ging es.
Ich freue mich sehr :D
Vielen Dank für die Hilfe !!!
Beste Grüße
Antworten