Seite 1 von 2
Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 12:00 pm
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
Re: Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 1:16 pm
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.
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
Re: Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 1:19 pm
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ß
Re: Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 1:27 pm
von jogo
Re: Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 1:59 pm
von Effigy
jogo hat geschrieben: Di Nov 26, 2019 1:27 pm
oder
Gruß, Jörg
Was ist hier mit X gemeint?
Gruß
Re: Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 2:02 pm
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
Re: Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 2:11 pm
von Effigy
Ahhh okay, wie gut! Danke! <3
Re: Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 3:42 pm
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!
Re: Lückenhaften Datensatz bereinigen
Verfasst: Di Nov 26, 2019 4:20 pm
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
Re: Lückenhaften Datensatz bereinigen
Verfasst: Mi Nov 27, 2019 10:41 am
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)