# Benötigte Packages
library("dplyr")
library("readr")
Prepro 2: Übung B
Aufgabe 1
Gegeben sind die Daten von drei Sensoren (sensor1.csv, sensor2.csv, sensor3.csv). Lese die Datensätze ein.
Code
<- read_delim("datasets/prepro/sensor1.csv", ";")
sensor1 <- read_delim("datasets/prepro/sensor2.csv", ";")
sensor2 <- read_delim("datasets/prepro/sensor3.csv", ";") sensor3
Aufgabe 2
Erstelle aus den 3 Dataframes eine einzige Dataframe, die aussieht wie unten dargestellt. Nutze dafür zwei joins aus dplyr
um 3 data.frames
miteinander zu verbinden. Bereinige im Anschluss die Spaltennamen (wie geht das?).
Code
<- full_join(sensor1, sensor2, "Datetime")
sensor1_2
<- rename(sensor1_2, sensor1 = Temp.x, sensor2 = Temp.y)
sensor1_2
<- full_join(sensor1_2, sensor3, by = "Datetime")
sensor_all
<- rename(sensor_all, sensor3 = Temp) sensor_all
Datetime | sensor1 | sensor2 | sensor3 |
---|---|---|---|
16102017_1800 | 23.5 | 13.5 | 26.5 |
17102017_1800 | 25.4 | 24.4 | 24.4 |
18102017_1800 | 12.4 | 22.4 | 13.4 |
19102017_1800 | 5.4 | 12.4 | 7.4 |
23102017_1800 | 23.5 | 13.5 | NA |
24102017_1800 | 21.3 | 11.3 | NA |
Aufgabe 3
Importiere die Datei sensor_fail.csv in R
.
Code
<- read_delim("datasets/prepro/sensor_fail.csv", delim = ";") sensor_fail
sensor_fail.csv
hat eine Variabel SensorStatus
: 1
bedeutet der Sensor misst, 0
bedeutet der Sensor misst nicht. Fälschlicherweise wurde auch dann der Messwert Temp = 0
erfasst, wenn Sensorstatus = 0
. Richtig wäre hier NA
(not available). Korrigiere den Datensatz entsprechend.
Sensor | Temp | Hum_% | Datetime | SensorStatus |
---|---|---|---|---|
Sen102 | 0.6 | 98 | 16102017_1800 | 1 |
Sen102 | 0.3 | 96 | 17102017_1800 | 1 |
Sen102 | 0.0 | 87 | 18102017_1800 | 1 |
Sen102 | 0.0 | 86 | 19102017_1800 | 0 |
Sen102 | 0.0 | 98 | 23102017_1800 | 0 |
Sen102 | 0.0 | 98 | 24102017_1800 | 0 |
Sen102 | 0.0 | 96 | 25102017_1800 | 1 |
Sen103 | -0.3 | 87 | 26102017_1800 | 1 |
Sen103 | -0.7 | 98 | 27102017_1800 | 1 |
Sen103 | -1.2 | 98 | 28102017_1800 | 1 |
Code
# mit base-R:
$Temp_correct[sensor_fail$SensorStatus == 0] <- NA
sensor_fail$Temp_correct[sensor_fail$SensorStatus != 0] <- sensor_fail$Temp #Warnmeldung kann ignoriert werden.
sensor_fail
# das gleiche mit dplyr:
<- sensor_fail |>
sensor_fail mutate(Temp_correct = ifelse(SensorStatus == 0, NA, Temp))
Aufgabe 4
Warum spielt das es eine Rolle, ob 0
oder NA
erfasst wird? Berechne die Mittlere der Temperatur / Feuchtigkeit nach der Korrektur.
Code
# Mittelwerte der falschen Sensordaten: 0 fliesst in die Berechnung
# ein und verfälscht den Mittelwert
mean(sensor_fail$Temp)
## [1] -0.13
# Mittelwerte der korrigierten Sensordaten: mit na.rm = TRUE werden
# NA-Werte aus der Berechnung entfernt.
mean(sensor_fail$Temp_correct, na.rm = TRUE)
## [1] -0.1857143