Lückenhaften Datensatz bereinigen

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

Moderatoren: EDi, jogo

Effigy
Beiträge: 35
Registriert: Di Nov 26, 2019 11:44 am

Lückenhaften Datensatz bereinigen

Beitrag von Effigy »

Hallo zusammen,

ich bin ein absoluter Beginner mit R und habe folgendes Problem:
Ich habe einen dataframe, der in der Spalte "Temp" Temperaturen als numerische Werte anzeigt. Allerdings kommen dort öfters mal Striche "---", so dass ich bestimmte Operationen wie bspw. mean berechnen nicht anwenden kann.
Nun meine Frage: Wie behandel ich diese Striche am Besten? Soll ich sie in NA umwandeln? Gibt es eine Funktion, die alle Zeilen mit "---" einfach ignoriert/löscht? Danke im Voraus für eure Hilfe, bin gerade etwas am verzweifeln. :)

Gruß,
Max
Dateianhänge
WSDed_2019-11-11.txt
(360.94 KiB) 40-mal heruntergeladen
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von jogo »

Hallo Max,

willkommen im Forum!
Effigy hat geschrieben: Di Nov 26, 2019 12:00 pm Ich habe einen dataframe, der in der Spalte "Temp" Temperaturen als numerische Werte anzeigt. Allerdings kommen dort öfters mal Striche "---", so dass ich bestimmte Operationen wie bspw. mean berechnen nicht anwenden kann.
Nun meine Frage: Wie behandel ich diese Striche am Besten? Soll ich sie in NA umwandeln? Gibt es eine Funktion, die alle Zeilen mit "---" einfach ignoriert/löscht? Danke im Voraus für eure Hilfe, bin gerade etwas am verzweifeln. :)
Solche nicht vorhandenen Werte sind ganz klassisch NA. Beim Einlesen kann man solche Kennungen für fehlende Werte behandeln.

Code: Alles auswählen

read.table(..., na.strings = "---", ...)
In Deinem Fall so:

Code: Alles auswählen

D <- read.delim("http://forum.r-statistik.de/download/file.php?id=781", header=FALSE, skip=2, na.strings = "---")
Man kann noch versuchen, die Spaltenbezeichnungen zu retten:

Code: Alles auswählen

H <- read.delim("http://forum.r-statistik.de/download/file.php?id=781", nrows=1)
colnames(D) <- colnames(H)
(In der originalen Datei sind zwei Zeilen für den Kopf vorhanden.)

Was man anschließend mit diesen Werten macht, ist eine ganz andere Frage.
Die sauberste Lösung ist, auf Berechnungen mit diesen Werten zu verzichten.

Gruß, Jörg
Effigy
Beiträge: 35
Registriert: Di Nov 26, 2019 11:44 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von Effigy »

Danke Jörg,

das hat funktioniert!

Kannst du mir bitte noch sagen, wie ich am besten einen Mittelwert für jeden Tag berechnen kann? :)

Gruß
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von jogo »

Code: Alles auswählen

tapply(D$Temp, D$X, FUN=mean, na.rm=TRUE)
oder

Code: Alles auswählen

aggregate(Temp ~ X, data=D, FUN=mean)
Gruß, Jörg
Effigy
Beiträge: 35
Registriert: Di Nov 26, 2019 11:44 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von Effigy »

jogo hat geschrieben: Di Nov 26, 2019 1:27 pm

Code: Alles auswählen

tapply(D$Temp, D$X, FUN=mean, na.rm=TRUE)
oder

Code: Alles auswählen

aggregate(Temp ~ X, data=D, FUN=mean)
Gruß, Jörg
Was ist hier mit X gemeint?

Gruß
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von jogo »

Bei mir ist das die Spalte, die das Datum enthält nach

Code: Alles auswählen

D <- read.delim("http://forum.r-statistik.de/download/file.php?id=781", header=FALSE, skip=2, na.strings = "---")
H <- read.delim("http://forum.r-statistik.de/download/file.php?id=781", nrows=1)
colnames(D) <- colnames(H)
Gruß, Jörg
Effigy
Beiträge: 35
Registriert: Di Nov 26, 2019 11:44 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von Effigy »

Ahhh okay, wie gut! Danke! <3
Effigy
Beiträge: 35
Registriert: Di Nov 26, 2019 11:44 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von Effigy »

Noch eine Frage:

Ich habe jetzt folgenden Code benutzt, um einen Mittelwert der Temperaturmessungen von jedem Tag zu erhalten.

Code: Alles auswählen

WSDede <- read.delim(header=TRUE, na.strings = "---", skip=1, file.choose())
WSDede2 <- tapply(WSDede$Temp, WSDede$Date, FUN=mean, na.rm=TRUE)
WSDede3 <- as.data.frame.table(WSDede2)
Mein Dataframe "WSDede3" sieht jetzt so aus:

Var1 Freq
1 01.10.19 12.372340
2 01.11.19 0.872093
3 02.10.19 10.033333
4 02.11.19 9.918750
5 03.10.19 9.350000
6 03.11.19 11.850000
7 .... ... usw.

Wie man sieht, kommt nach dem 01.10.19 schon der 01.11.19. Wie kann ich ihn richtig sortieren? Danke!
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von jogo »

Wenn man das Datum vorher wirklich in einen Datumstyp umwandelt, dann wird auch richtig sortiert.

Code: Alles auswählen

D$Tag <- as.Date(D$X, "%d.%m.%y")
aggregate(Temp ~ Tag, data=D, FUN=mean, na.rm=TRUE)
Gruß, Jörg
Effigy
Beiträge: 35
Registriert: Di Nov 26, 2019 11:44 am

Re: Lückenhaften Datensatz bereinigen

Beitrag von Effigy »

Ok danke dir, ich hab's letztendlich so gemacht:

Code: Alles auswählen

WSDede3$Var1 <- lubridate::dmy(WSDede3$Var1)
WSDede4 <-dplyr::arrange(WSDede3, Var1)
Antworten