Veröffentlichungsdatum

16. Oktober 2023

# Benötigte Packages
library("dplyr")
library("readr")

Aufgabe 1

Gegeben sind die Daten von drei Sensoren (sensor1.csv, sensor2.csv, sensor3.csv). Lese die Datensätze ein.

Code
sensor1 <- read_delim("datasets/prepro/sensor1.csv", ";")
sensor2 <- read_delim("datasets/prepro/sensor2.csv", ";")
sensor3 <- read_delim("datasets/prepro/sensor3.csv", ";")

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
sensor1_2 <- full_join(sensor1, sensor2, "Datetime")

sensor1_2 <- rename(sensor1_2, sensor1 = Temp.x, sensor2 = Temp.y)

sensor_all <- full_join(sensor1_2, sensor3, by = "Datetime")

sensor_all <- rename(sensor_all, sensor3 = Temp)
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
sensor_fail <- read_delim("datasets/prepro/sensor_fail.csv", delim = ";")

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:
sensor_fail$Temp_correct[sensor_fail$SensorStatus == 0] <- NA
sensor_fail$Temp_correct[sensor_fail$SensorStatus != 0] <- sensor_fail$Temp #Warnmeldung kann ignoriert werden.

# 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