R kann alle gängigen Datenformate einlesen. Häufig empfiehlt es sich jedoch, die Daten bereits z.B. aus Excel heraus als .txt Datei zu exportieren.
library(readxl); library(haven)
# Tabulator
data <- read.table(file="https://mmi.psycho.unibas.ch/r-toolbox/data/RoleSat.txt", header=TRUE)
# Komma
data <- read.table(file="https://mmi.psycho.unibas.ch/r-toolbox/data/mtcars.csv", header=TRUE)
library(readxl)
download.file("https://mmi.psycho.unibas.ch/r-toolbox/data/mtcars.xlsx", destfile = "mtcars.xlsx") # !! Dieser Teil ist nur für das Beispiel notwenig !!
data <- read_excel(path="mtcars.xlsx", sheet = 1, col_names = TRUE) # Wir möchten das Sheet 1 laden und berücksichtigen die Variablennamen in der Kopfzeile
## New names:
## * `` -> ...1
library(haven)
data <- read_sav("https://mmi.psycho.unibas.ch/r-toolbox/data/Cars.sav")
library(lsr) # Umwandlung des Datensatzes von wide in long
Bei unseren Funktionen für die Auswertung von Häufigkeitsdaten (z.B. Balkendiagramm, Liniendiagramm, Vierfeldertest, Korrespondenzanalyse, etc.), gehen wir davon aus, dass im Datensatz pro Proband eine Zeile und pro Variable eine Spalte verwendet wird. In Zeitschriften, Lehrbüchern und Übungen werden Häufikeitsdaten jedoch meistens als Häufigkeitstabellen dargestellt. Die Eingabe von Häufigkeitstabellen ist weniger aufwendig. Deshalb zeigen wir für die wichtigsten Varianten anhand von Beispielen die Umwandlung von Häufigkeitstabellen in Struktur 1.
Der umzuwandelnde Datensatz heisst “data1”, der umgewandelte Datensatz heisst "data.
Beispiel für zwei nominale Variablen:
# Dateneingabe
Reason <- rep(c("money","future","unemployment","circumstances","hard","economic","egoism","employment","finances","war","housing","fear","health","work"),5)
Education <- rep(c("unqualified","cep","bepc","high_school_diploma","university"), each=14)
Häufigkeit <- c(51,53,71,1,7,7,21,12,10,4,8,25,18,35,64,90,111,7,11,13,37,35,7,7,22,45,27,61,32,78,50,5,4,12,14,19,7,7,7,38,20,29,29,75,40,5,3,11,26,6,3,6,10,38,19,14 ,17,22,11,4,2,11,9,7,1,2,5,13,9,12)
data1 <- data.frame(Reason, Education, Häufigkeit)
# Erste 6 Zeilen des Datensatzes vor dem Umwandeln
head(data1)
## Reason Education Häufigkeit
## 1 money unqualified 51
## 2 future unqualified 53
## 3 unemployment unqualified 71
## 4 circumstances unqualified 1
## 5 hard unqualified 7
## 6 economic unqualified 7
# Name der Variable mit den Häufikeiten
Häufigkeiten <- "Häufigkeit"
# Den Datensatz in Struktur 1 umwandeln
countsToCases <- function(x, countcol = Häufigkeiten) {
idx <- rep.int(seq_len(nrow(x)), x[[countcol]]); x[[countcol]] <- NULL; x[idx, ]}
data <- as.data.frame(countsToCases(data1))
# Erste 6 Zeilen des Datensatzes nach dem Umwandeln
head(data)
## Reason Education
## 1 money unqualified
## 1.1 money unqualified
## 1.2 money unqualified
## 1.3 money unqualified
## 1.4 money unqualified
## 1.5 money unqualified
Kleine Kreuztabellen kann man direkt im Editor eingeben und anschliessend in Struktur 1 umwandeln.
Beispiel:
# Dateneingabe
data1 <- matrix(c(12, 80, 30,
20, 70, 50,
35, 50, 30,
40, 55, 28), ncol=3, byrow=TRUE)
dimnames(data1) <- list(Altersklasse=c("10-12", "13-15", "16-18", "19-21"), Deutungsart= c("Mensch", "Tier", "Pflanze"))
# Datensatz vor dem Umwandeln
data1
## Deutungsart
## Altersklasse Mensch Tier Pflanze
## 10-12 12 80 30
## 13-15 20 70 50
## 16-18 35 50 30
## 19-21 40 55 28
# Den Datensatz in Struktur 1 umwandeln
data <- as.data.frame.table(data1)
countsToCases <- function(x, countcol = "Freq") {
idx <- rep.int(seq_len(nrow(x)), x[[countcol]]); x[[countcol]] <- NULL; x[idx, ]}
data <- countsToCases(data)
# Erste 6 Zeilen des Datensatzes nach dem Umwandeln
head(data)
## Altersklasse Deutungsart
## 1 10-12 Mensch
## 1.1 10-12 Mensch
## 1.2 10-12 Mensch
## 1.3 10-12 Mensch
## 1.4 10-12 Mensch
## 1.5 10-12 Mensch
Für grosse Kreuztabellen empfiehlt sich die Eingabe in EXCEL. In der ersten Spalte stehen die Stufen des Faktors, welcher die Zeilen definiert (oberste Zelle leer), in der ersten Zeile die Stufen des Faktors, welcher die Spalten definiert, und in den Zellen die Häufigkeiten. Die Tabelle als “Tabstoppgetrennter Text (.txt)” speichern und mit “read.table()” in R einlesen. Die Bezeichnungen für den Zeilen- und den Spaltenfaktor werden unter “Faktornamen spezifizieren” eingegeben.
Beispiel:
# Dateneingabe
data1 <- read.table("https://mmi.psycho.unibas.ch/r-toolbox/data/children2.txt", header=TRUE) # Datensatz children2 laden
# Datensatz vor dem Umwandeln
data1
## unqualified cep bepc high_school_diploma university
## money 51 64 32 29 17
## future 53 90 78 75 22
## unemployment 71 111 50 40 11
## circumstances 1 7 5 5 4
## hard 7 11 4 3 2
## economic 7 13 12 11 11
## egoism 21 37 14 26 9
## employment 12 35 19 6 7
## finances 10 7 7 3 1
## war 4 7 7 6 2
## housing 8 22 7 10 5
## fear 25 45 38 38 13
## health 18 27 20 19 9
## work 35 61 29 14 12
# Faktornamen spezifizieren
Zeilenfaktor <- "Reason"
Spaltenfaktor <- "Education"
# Den Datensatz in Struktur 1 umwandeln
data <- as.data.frame.table(as.matrix(data1))
names(data)[1:2] <- c(Zeilenfaktor, Spaltenfaktor)
countsToCases <- function(x, countcol = "Freq") {
idx <- rep.int(seq_len(nrow(x)), x[[countcol]]); x[[countcol]] <- NULL; x[idx, ]}
data <- countsToCases(data)
# Erste 6 Zeilen des Datensatzes nach dem Umwandeln
head(data)
## Reason Education
## 1 money unqualified
## 1.1 money unqualified
## 1.2 money unqualified
## 1.3 money unqualified
## 1.4 money unqualified
## 1.5 money unqualified
Daten von Designs mit abhängigen Stichproben können im Wide- oder im Long-Format eingegeben werden. Im Wide-Format wird pro Proband nur eine Zeile verwendet. Das hat zur Folge, dass für jede Stufe eines Faktors mit abhängigen Stichproben eine Spalte verwendet werden muss. Bei unseren Funktionen für Varianzanalysen und t-Tests mit abnhängigen Stichproben gehen wir von dieser Datenstruktur aus. Der Benutzer muss dann keine Umstrukturierung der Daten vornehmen. Wenn man jedoch ausgehend von einem Datensatz im Wide-Format Grafiken oder Tabellen von Kennwerten erstellen will, ist es hilfreich, den Datensatz zuerst in das Long-Format zu umzuwandeln.
Der umzuwandelnde Datensatz heisst “data1”, der umgewandelte Datensatz heisst "data.
Damit die für die Umwandlung verwendete Funktion lsr() korrekt arbeitet, müssen die Namen von Faktoren mit abhängigen Stichproben folgenden Aufbau haben: Name.AV_Stufe.wsFaktor1_Stufe.wsFaktor2
Beispiel mit zwei Within-Faktoren und einem Between-Faktor:
# Dateneingabe
Testangst <- rep(c("hoch", "niedrig"), c(6,6))
Testleistung_verbal_Einzeltest <- c(99, 102, 97, 104, 103, 97, 107, 109, 104, 110, 102, 105)
Testleistung_verbal_Gruppentest <- c(104, 103, 101, 106, 106, 99, 103, 104, 105, 105, 99, 102)
Testleistung_praktisch_Einzeltest <- c(102, 101, 103, 107, 104, 104, 104, 104, 106, 104, 102, 102)
Testleistung_praktisch_Gruppentest <- c(106, 104, 104, 112, 109, 103, 98, 106, 102, 103, 96, 99)
data1 <- data.frame(Testangst, Testleistung_verbal_Einzeltest, Testleistung_verbal_Gruppentest, Testleistung_praktisch_Einzeltest, Testleistung_praktisch_Gruppentest)
# Datensatz vor dem Umwandeln
data1
## Testangst Testleistung_verbal_Einzeltest Testleistung_verbal_Gruppentest
## 1 hoch 99 104
## 2 hoch 102 103
## 3 hoch 97 101
## 4 hoch 104 106
## 5 hoch 103 106
## 6 hoch 97 99
## 7 niedrig 107 103
## 8 niedrig 109 104
## 9 niedrig 104 105
## 10 niedrig 110 105
## 11 niedrig 102 99
## 12 niedrig 105 102
## Testleistung_praktisch_Einzeltest Testleistung_praktisch_Gruppentest
## 1 102 106
## 2 101 104
## 3 103 104
## 4 107 112
## 5 104 109
## 6 104 103
## 7 104 98
## 8 104 106
## 9 106 102
## 10 104 103
## 11 102 96
## 12 102 99
# Variablen spezifizieren
between <- c("Testangst") # Between-Faktoren: gleich wie im Datensatz. Falls keine: between <- NULL
within <- c("Intelligenz","Testsituation") # Within-Faktoren: Abfolge gemäss Variabennamen im Datensatz!
AV <- "Testleistung" # Abhängige Variable: gleich wie im Datensatz
# Einfügen der Spalte "Block" mit den Probanden-IDs
data1$Block <- as.factor(1:nrow(data1))
# Umwandlung des Datensatzes von wide in long
library(lsr)
data <- wideToLong(data1, within=within)
# Erste 6 Zeilen des Datensatzes nach dem Umwandeln
head(data)
## Testangst Block Testleistung Intelligenz Testsituation
## 1 hoch 1 99 verbal Einzeltest
## 2 hoch 2 102 verbal Einzeltest
## 3 hoch 3 97 verbal Einzeltest
## 4 hoch 4 104 verbal Einzeltest
## 5 hoch 5 103 verbal Einzeltest
## 6 hoch 6 97 verbal Einzeltest
Beispiel mit zwei Within-Faktoren und einem Between-Faktor:
# Dateneingabe (Rücktransformation des obigen Beispiels)
data1 <- data
# Erste 6 Zeilen des Datensatzes vor dem Umwandeln
head(data1)
## Testangst Block Testleistung Intelligenz Testsituation
## 1 hoch 1 99 verbal Einzeltest
## 2 hoch 2 102 verbal Einzeltest
## 3 hoch 3 97 verbal Einzeltest
## 4 hoch 4 104 verbal Einzeltest
## 5 hoch 5 103 verbal Einzeltest
## 6 hoch 6 97 verbal Einzeltest
# Links Name der abhängigen Variablen, rechts Namen der Faktoren mit abhängigen Stichproben
Formel <- Testleistung~Intelligenz+Testsituation
# Umwandlung des Datensatzes von long in wide
library(lsr)
data <- longToWide(data1, Formel)
# Datensatz vor dem Umwandeln
data
## Testangst Block Testleistung_verbal_Einzeltest
## 1 hoch 1 99
## 2 hoch 2 102
## 3 hoch 3 97
## 4 hoch 4 104
## 5 hoch 5 103
## 6 hoch 6 97
## 7 niedrig 7 107
## 8 niedrig 8 109
## 9 niedrig 9 104
## 10 niedrig 10 110
## 11 niedrig 11 102
## 12 niedrig 12 105
## Testleistung_verbal_Gruppentest Testleistung_praktisch_Einzeltest
## 1 104 102
## 2 103 101
## 3 101 103
## 4 106 107
## 5 106 104
## 6 99 104
## 7 103 104
## 8 104 104
## 9 105 106
## 10 105 104
## 11 99 102
## 12 102 102
## Testleistung_praktisch_Gruppentest
## 1 106
## 2 104
## 3 104
## 4 112
## 5 109
## 6 103
## 7 98
## 8 106
## 9 102
## 10 103
## 11 96
## 12 99