Einzelne Datenfiles zu einer Gesamtdatei zusammenfügen - idea-labs/documentation GitHub Wiki

Die meisten Programme zum Durchführen von Experimenten (wie z.B. PsychoPy) erstellen für jeden Testdurchlauf ein separates Ergebnisfile, da bestehende Daten auf diese Weise z.B. nie beim Speichern neuer Daten überschrieben oder beschädigt werden können. Für die weiteren statistischen Analysen ist es jedoch sehr viel einfacher, die Daten aller Versuchspersonen in einer einzigen Gesamtdatei zu haben, als über viele einzelne Dateien verteilt.

Da es recht mühselig wäre, die Daten aller Einzeldateien händisch via Copy & Paste in eine Gesamtdatei zu übertragen, haben wir hier einfache Wege aufgeführt, wie man Excel- und CSV-Dateien automatisiert zusammenfügen kann.

Vorbemerkungen

Bei allen hier beschriebenen Wegen legt man am besten zuerst alle zu mergenden Datenfiles (und nur diese!) in einen separaten Unterordner. Das ist weniger fehleranfällig, als mit Wildcards nur einen bestimmten Teil der Dateien auszuwählen.

In jedem Fall sollte man unbedingt in der Gesamtdatei prüfen, dass wirklich sämtliche Daten für alle Versuchspersonen in dieser vorhanden sind. Ein einfacher Weg hierfür ist die Pivot-Table-Funktion von Excel (und LibreOffice). Hierbei kann man z.B. die VP-ID als Zeilenvariable nehmen, die Versuchsbedingungen als Spaltenvariablen und als Werte-Variable z.B. die Reaktionszeit (und von dieser dann "Anzahl" statt "Summe"). Auf diese Weise bekommt man eine Tabelle, bei der man sehen kann, ob für alle Versuchspersonen die selbe Anzahl Datensätze für die verschiedenen Versuchsbedingungen vorhanden sind.

Wenn ihr sowieso viel mit R macht, könnt ihr anstelle der im Folgenden beschriebenen Wege auch R zum Mergen der Excel- oder CSV-Einzelfiles benutzen, wie z.B. in dieser Anleitung beschrieben.

Excel-Dateien

Die einfachste Art, Excel-Dateien zusammenzufügen, ist wahrscheinlich das freie RDBMerge-Add-in für Excel, für das es separate Mac- und Windows-Versionen gibt:

Mit diesem Add-in kann man auch komplexere Merges vornehmen (z.B. nur bestimmte Seiten/Ausschnitte aus den Einzeldateien extrahieren usw.), aber für unsere PsychoPy-Dateien würde man einfach Which range: [x] First cell einstellen mit Wert A2. Auf diese Weise kopiert man aus jeder Datei alles bis auf die erste Zeile mit den Spaltenüberschriften. Nach dem Mergen muss man dann nur noch diese Spaltenüberschriften einmal in die erste Zeile der Gesamtdatei kopieren.

CSV-Dateien

Mit dem gerade genannten RDBMerge-Add-in kann man grundsätzlich auch CSV-Dateien mergen, jedoch hat dieses bei manchen CSV-Dateien Probleme mit Umlauten und damit, wenn in den CSV-Dateien nicht Kommata als Trennzeichen benutzt wurden sondern z.B. Semikolons, wie es im deutschen Sprachraum oft der Fall ist.

Praktischerweise sind CSV-Dateien ganz simple Textdateien, und Textdateien kann man einfach hintereinander "kleben" um sie zusammenzufügen, ohne ein spezielles Programm hierfür benutzen zu müssen:

CSV-Dateien mit macOS mergen

  1. Öffnet das Terminal-Programm (in "/Programme/Hilfsprogramme/")
  2. Tippt cd (mit einem Leerzeichen am Ende) ein und zieht dann den Ordner, in dem sich die CSV-Dateien befinden, auf das Terminal-Fenster. Hierdurch wird der komplette Pfad des Ordners eingefügt, sodass ihr diesen nicht eintippen müsst.
  3. Wenn ihr nun Return drückt, wechselt das Terminal in den angegebenen Ordner (das "cd" steht für "change directory").
  4. Nun kopiert ihr den folgenden Befehl in das Terminal-Fenster und drückt danach Return: awk '(NR == 1) || (FNR > 1)' *.csv > ../MERGED.csv

Dieser letzte Befehl erstellt eine Datei namens MERGED.csv, die (wegen des ../ vor dem Dateinamen) nicht im Ordner mit den CSV-Dateien liegt, sondern eine Ebene höher. Auf diese Weise kann es nicht passieren, dass man beim (späteren) erneuten Mergen dann manche/alle Daten auf einmal doppelt in der Datei hat.

Durch die Parameter (NR == 1) || (FNR > 1) wird die Zeile mit den Spaltenüberschriften nur aus der ersten CSV-Datei übernommen und nicht aus den restlichen CSV-Dateien, sodass man in der fertigen Gesamtdatei keine Spaltenüberschriften mehr hinzufügen oder entfernen muss.

CSV-Dateien mit Windows mergen

  1. Wechselt im Windows Explorer in den Ordner mit den CSV-Dateien.
  2. Im Explorer-Fenster ist dann oben mittig eine Box, in der der Pfad des Ordners angezeigt wird ("Dieser PC > ..."). Wenn ihr in dieser Box auf den leeren Bereich hinter dem Namen des CSV-Ordners klickt, wird der tatsächliche Pfad als editierbarer Text angezeigt.
  3. Anstelle dieses Texts gebt ihr hier cmd ein und drückt danach Return. Hierauf öffnet sich ein DOS-Fenster, bei dem man schon gleich in dem richtigen Ordner mit den CSV-Dateien ist.
  4. Kopiert nun den folgenden Befehl in das DOS-Fenster und drückt danach Return: copy *.csv ..\MERGED.csv

Dieser letzte Befehl erstellt eine Datei namens MERGED.csv, die (wegen des ..\ vor dem Dateinamen) nicht im Ordner mit den CSV-Dateien liegt, sondern eine Ebene höher. Auf diese Weise kann es nicht passieren, dass man beim (späteren) erneuten Mergen dann manche/alle Daten auf einmal doppelt in der Datei hat.

In dieser neu erstellten Gesamtdatei MERGED.csv sind die einzelnen CSV-Dateien einfach hintereinander "geklebt", wodurch auch alle Spaltenüberschriften mit in der neuen Datei gelandet sind. Die überschüssigen Überschriften kann aber sehr leicht entfernen: Hierzu benutzt man einfach die Sortierfunktion von Excel und sortiert alle Daten in die Reihenfolge, in der sie sowieso sein sollten (normalerweise ist das "VP-ID > Trial Nr"). Danach sind alle Spaltenüberschriften zusammen in einem Block, sodass man die überschüssigen Zeilen mit Spaltenüberschriften als Ganzes löschen kann.

R Skripte zum Mergen von Einzeldateien

Sollen alle weitergehenden Analysen ohnehin mir der statistischen Programmierumgebung R durchgeführt werden, ist es am einfachsten, den Import und das Mergen von Einzeldateien mit einem kleinen R-Skript durchzuführen. Aus dem hier verlinkten GitHub Repo kann ein Beispiel-Skript heruntergeladen werden. Weiterhin enthält das Repo einen Ordner mit zufällig generierten CSV-Dateien, mit denen das Skript ausprobiert werden kann.

Umstrukturieren von Daten (Long- versus Wide-Format)

Die experimentellen Rohdaten, um die es auf dieser Wikiseite geht, sind in den meisten Fällen in einem Format, bei dem jede Zeile einem Trial einer Versuchsperson entspricht (dieses nennt man meist das "Long-Format"). Für statistische Auswertungen benötigt man die Daten jedoch manchmal in einem Format, bei dem alle Daten einer Versuchsperson in der selben Zeile sind und jede Zeile einer separaten Versuchsperson entspricht (dieses nennt man meist das "Wide-Format"). Hier sind zwei mögliche Arten, wie man diese Konvertierung vornehmen kann:

  • Auf der Wikiseite Längsschnittdaten in SPSS nutzen ist am Beispiel von REDCap-Längsschnittdaten beschrieben, wie man mit SPSS Daten vom Long-Format in das Wide-Format konvertieren kann.

  • Ein anderer Weg, die Daten vom Long-Format in das Wide-Format zu konvertieren, ist mittels einer Pivot Table in Excel oder LibreOffice. Dieses ist insbesondere hilfreich, wenn man nicht sämtliche Rohwerte im Wide-Format haben möchte, sondern nur die Zellmittelwerte der verschiedenen Versuchsbedingungskombinationen aller Versuchspersonen (z.B. für eine ANOVA).

  • Das oben schon erwähnte Beispiel-Skript enthält auch eine kurze Anleitung bzw. den Beispielcode für die Umstrukturierung von Daten aus dem Long- ins Wide-Format. Dazu empfehlen wir die Nutzung des R-Pakets tidyr. Achtung: Das noch sehr populäre Paket reshape2 wird nicht mehr weiterentwickelt und sollte deswegen nicht mehr für neue Projekte eingebunden werden.

Wenn ihr zu irgendetwas auf dieser Wikiseite Fragen habt, wendet euch einfach an 👤 Björn Rump.

⚠️ **GitHub.com Fallback** ⚠️