Re: Neuer Datensatz aus "For-Schleife"
Verfasst: So Nov 03, 2024 8:05 am
Update:
Nachdem "bigben" mir den Unterschied zwischen "data.frame" und "data.table" näher gebracht hat, habe ich jetzt einen Code gebastelt, der in sich lauffähig ist.
(Die inflationäre Kommentierung soll nur meine Gedanken und Lösungsansätze nachvollziehen lassen.)
Ich gehe allerdings davon aus, das der Code noch "unsauber" ist, also Schritte durchlaufen werden, die man vielleicht straffen und zusammenführen kann, wie z.B. den Umstand, dass ich erst einen "data.frame" erzeuge, diesen dann in einen "data.table" konvertiere und danach die Spalte "SHORT" (die Aufgrund ihres Typs ("character") Probleme erzeugte) in den Typ "numeric" konvertiere) ... wobei mir nicht klar ist, warum R ihr den Typ "character" überhaupt zuweist.
Nachdem "bigben" mir den Unterschied zwischen "data.frame" und "data.table" näher gebracht hat, habe ich jetzt einen Code gebastelt, der in sich lauffähig ist.
(Die inflationäre Kommentierung soll nur meine Gedanken und Lösungsansätze nachvollziehen lassen.)
Ich gehe allerdings davon aus, das der Code noch "unsauber" ist, also Schritte durchlaufen werden, die man vielleicht straffen und zusammenführen kann, wie z.B. den Umstand, dass ich erst einen "data.frame" erzeuge, diesen dann in einen "data.table" konvertiere und danach die Spalte "SHORT" (die Aufgrund ihres Typs ("character") Probleme erzeugte) in den Typ "numeric" konvertiere) ... wobei mir nicht klar ist, warum R ihr den Typ "character" überhaupt zuweist.
Code: Alles auswählen
library(data.table)
library(readr)
### EINLESEN DER *.CSV-DATEI
tempeva <- fread("DATA/Evaluation.csv", sep=";", dec=",")
### ERZEUGEN DER SPALTE "SHORT" als Merkmal mit den linken 3 Zeichen der ID
tempeva$SHORT <- substr(tempeva$SEM_TERM_NR, 1, 3)
### NEUEN, BEREINIGTEN DATAFRAME ERZEUGEN
### ERMITTLUNG DER TABELLENWEITE VON "TEMPEVA"
rows <- nrow(tempeva)
### ERZEUGEN EINES LEEREN DATA.FRAME
semtemp <- data.frame(matrix(ncol = 0, nrow = rows))
### KONVERTIERUNG DES LEEREN DATA.FRAME IN EINEN DATA.TABLE
semeva <- as.data.table(semtemp)
### IMPORT DER NOTWENDIGEN SPALTEN
semeva$SHORT <- tempeva$SHORT
semeva$INHALT <- tempeva$`Evaluierung - Mittelwert Frage 1 - INHALT`
semeva$VERMITTLUNG <- tempeva$`Evaluierung - Mittelwert Frage 2 - VERMITTLUNG`
semeva$NUTZEN <- tempeva$`Evaluierung - Mittelwert Frage 3 _ NUTZEN`
semeva$UNTERKUNFT <- tempeva$`Evaluierung - Mittelwert Frage 4 - UNTERKUNFT`
semeva$GESAMT <- tempeva$`Evaluierung - Mittelwert Fragen 1 bis 3 - SEMINAR`
### KONVERTIERUNG VON "SHORT" IN DEN TYP "NUMERIC"
semeva$SHORT <- as.numeric(semeva$SHORT)
# class(semeva$SHORT)
#
# View(semeva)
### BERECHNUNG DER MITTELWERTE
nichtNull <- semeva[rowSums(semeva[ , !"SHORT"] != 0) != 0, ]
Ergebnis <- round(nichtNull[, lapply(.SD, mean), by = SHORT],2)
### SORTIERUNG DES ERGEBNISSES
setorder(Ergebnis, SHORT)
### ABSPEICHERN DES ERGEBNISSES (FUER EVTL. WEITERE ZWECKE)
write_excel_csv2(Ergebnis, file=paste0("DATA/Ergebnis_", format(Sys.time(), "%Y-%m-%d_%H-%M")))