<- data.frame(Name = character(), Vorname = character(), Alter = numeric(),
FB Item1 = numeric(), Item2 = numeric(), Item3 = numeric(), Item4 = numeric(),
VAS = numeric())
<- data.frame(Name = character(), Vorname = character(), Alter = numeric(),
KRAFT Versuch1 = numeric(), Versuch2 = numeric(), Versuch3 = numeric())
Ausgangssituation
In der heutigen Einheit geht es darum, ein Skript zu entwickeln, welches eine batch-Verarbeitung (“Stapelverarbeitung”) mehrerer Dateien vornimmt, um die darin enthaltenen Daten am Ende einer Analyse zugänglich zu machen.
In zahlreichen Forschungskontexten wird man vor der Datenanalyse einen sehr zerstreuten Datenbestand vorfinden, in welchem für jede Versuchsperson separat erzeugte Dateien mit darin enthaltenen Mess- oder Befragungsdaten vorhanden sind. Der Optimalfall, dass man sich im Rahmen einer wissenschaftlichen Studie direkt einen aufbereiteten Datensatz erzeugen kann, wird womöglich nur bei digitalen Umfragen/Fragebögen auf Befragungsservern möglich sein. In den allermeisten Fällen werden die erhobenen Daten in verstreuten Tabellen (z. B. Excel- oder Textdateien) abgelegt sein.
Um diese Datenbestände einer Analyse zuführen zu können, müssen wir zunächst alle Daten aus allen individuellen Dateien “einsammeln” und sie in einem geeigneten data.frame anordnen. Dabei werden wir heute auch das rekursive Durchsuchen von Unterordnern einbeziehen, denn die Dateien liegen oftmals über mehrere Unterordner verstreut vor.
Vorbereitung
Lade die Datei Verzeichnisstruktur.zip
aus OPAL und entpacke sie in einem geeigneten Verzeichnis. Setze das Arbeitsverzeichnis von R in diesen Ordner.
Dort sollte dann folgende Ordnerstruktur zu sehen sein:
In jedem der Probandenordner P01 bis P04 befinden sich zwei Unterordner (Fragebogen, Kraft), in welchen sich jeweils eine Excel-Datei (.xlsx) befindet, welche Daten zur jeweiligen Versuchsperson und Erhebungsmethode enthält. Ziel dieser Übungsaufgabe ist es, ein Skript zu entwickeln, welches den gesamten Verzeichnisbaum rekursiv durchläuft und die Daten aus allen .xlsx-Dateien in zwei data.frames sammelt: FB
für die Fragebogendaten, Kraft
für die Kraftwerte.
Aufgabe 1
Sieh dir die Inhalte der .xlsx-Dateien an und führe dann folgende Schritte durch:
Erzeuge zwei leere data.frames
FB
undKraft
mit passenden Variablenanordnungen, welche am Ende die Daten aller Probanden des Verzeichnisbaums aufnehmen werden.Schreibe den Einlesebefehl, so dass die Variablen aus den .xlsx-Dateien in die eben generierten leeren data.frames
FB
undKraft
eingelesen werden. Eine mögliche Funktion dafür istreadxl::read_excel()
.
library(readxl)
<- read_excel("P02/Fragebogen/fb.xlsx", sheet=1)
fb <- read_excel("P02/Kraft/kraft.xlsx", sheet=1) kraft
Aufgabe 2
Generiere eine Einleseroutine für alle Dateien innerhalb des Verzeichnisbaums. Die wichtigste Funktion dafür ist list.files()
. Sie listet die Dateien auf, die innerhalb eines Verzeichnisses liegen. Filter können nach Dateityp gesetzt werden. Rekursives Durchsuchen gelingt mit der Option recursive=TRUE
.
### Variante 1: zwei getrennte Dateilisten
<- list.files(pattern = "fb.xlsx", recursive = TRUE)
FB.Dateien <- list.files(pattern = "kraft.xlsx", recursive = TRUE)
Kraft.Dateien
for(i in 1:length(FB.Dateien)){
<- read_excel(FB.Dateien[i], sheet=1)
fb <- read_excel(Kraft.Dateien[i], sheet=1)
kraft <- rbind(FB, fb)
FB <- rbind(KRAFT, kraft)
KRAFT }
### Für Fortgeschrittene: Variante 2 mit einer Liste und logischer Prüfung
<- list.files(pattern = ".xlsx", recursive = TRUE)
Dateien <- grepl("Fragebogen", Dateien)
FB.check
for(i in 1:length(Dateien)){
<- read_excel(Dateien[i], sheet=1)
D
if(FB.check[i]==TRUE ){
<- rbind(FB, D)
FB else{
}<- rbind(KRAFT, D)
KRAFT
} }
Aufgabe 3
Speichere die so erzeugten data.frames in einer .RData
-Datei im Arbeitsverzeichnis.
save(list = c("FB", "KRAFT"), file="Daten_Einlesen.RData")