Hallo rudiment,
also erstmal großes Lob, dass Du direkt ein Beispiel mitgeliefert hast. Damit kann man gut arbeiten. Nur die Bezeichnungen 0 und 1 für die beiden Versuche haben mich erst verwirrt. Dachte zuerst, dass 0 = kein Versuch durchgeführt.
Da fallen mir drei Vorgehensweisen zu ein. Du schreibst ja, dass Du es eigentlich einen größeren Datensatz bearbeiten willst. Musst Du schauen, was für dich passt. Mir gefällt 2b) am besten
1) der faule Ansatz
Code: Alles auswählen
#Anteil IDs
colSums(d[,,1])/3
colSums(d[,,2])/3
#Anteil Zeiten
rowSums(d[,,1])/4
rowSums(d[,,2])/4))
2a) Längsdatensatz einfach
Code: Alles auswählen
library(dplyr)
#zuerst einen data.frame erstellen inkl. Zählvariable
df <- data.frame(
ID = c("Jonathan", "Jonathan", "Jonathan", "Jonathan", "Annika", "Annika", "Annika", "Annika", "Hans", "Hans", "Hans", "Hans"),
Zeit = c("T1", "T2", "T3", "T4", "T1", "T2", "T3", "T4", "T1", "T2", "T3", "T4"),
Versuch = c("1", "1", "1", "1", "0", "0", "0", "0", "1", "0", "0", "1"),
durchgefuehrt = 1,
stringsAsFactors = FALSE)
#Anteil IDs
df %>% group_by(Zeit,Versuch) %>%
summarize(AnteilIDs = sum(durchgefuehrt)/4)
#Anteil Zeiten
df %>% group_by(ID,Versuch) %>%
summarize(AnteilZeiten = sum(durchgefuehrt)/4)
2b) Längsdatensatz vollständig
bisschen doof bei 2a) ist, dass wir keinen vollständigen Datensatz haben, daher würde ich zuerst die Tabelle vervollständigen
Code: Alles auswählen
library(dplyr)
df <- data.frame(
ID = c("Jonathan", "Jonathan", "Jonathan", "Jonathan", "Annika", "Annika", "Annika", "Annika", "Hans", "Hans", "Hans", "Hans"),
Zeit = c("T1", "T2", "T3", "T4", "T1", "T2", "T3", "T4", "T1", "T2", "T3", "T4"),
Versuch = c("1", "1", "1", "1", "0", "0", "0", "0", "1", "0", "0", "1"),
durchgefuehrt = 1,
stringsAsFactors = FALSE)
#vollständigen Datensatz erzeugen
dfFull <- expand.grid(ID=c("Jonathan","Annika","Hans"),
Zeit=c("T1","T2","T3","T4"),
Versuch=c("0","1"),
stringsAsFactors = FALSE)
# verbindet die beiden data.frames (left_join = linker Datensatz bleibt vollständig) und ersetzt dabei fehlende Werte im rechten Datensatz durch 0
dfFull <- left_join(dfFull,df) %>%
mutate(durchgefuehrt = coalesce(durchgefuehrt,0))
# dann geht es weiter wie in 2a, nur dass wir jetzt n() zum Zählen verwenden können
df %>% group_by(Zeit,Versuch) %>%
summarize(AnteilIDs = sum(Dummy)/n())
df %>% group_by(ID,Versuch) %>%
summarize(AnteilZeiten = sum(durchgefuehrt)/n())
3) Querdatensatz
Der Quer-Datensatz ist für die meisten Menschen einfacher zu verstehen, dafür muss man sich um die Spalten einzeln kümmern
Code: Alles auswählen
library(tidyr)
library(dplyr)
df <- data.frame(
ID = c("Jonathan", "Jonathan", "Jonathan", "Jonathan", "Annika", "Annika", "Annika", "Annika", "Hans", "Hans", "Hans", "Hans"),
Zeit = c("T1", "T2", "T3", "T4", "T1", "T2", "T3", "T4", "T1", "T2", "T3", "T4"),
Versuch = c("1", "1", "1", "1", "0", "0", "0", "0", "1", "0", "0", "1"),
durchgefuehrt = 1,
stringsAsFactors = FALSE)
# umwandeln in Quer-Datensatz (Achtung, braucht eine neue Version des tidyr-Package)
df2 <- pivot_wider(df, names_from = Versuch, values_from = durchgefuehrt,
values_fill = list(durchgefuehrt=0), names_prefix="Versuch.")
#Anteil IDs
df2 %>% group_by(Zeit) %>%
summarize(Anteil.0 = sum(Versuch.0)/n(),
Anteil.1 = sum(Versuch.1)/n())
#Anteil Zeiten
df2 %>% group_by(ID) %>%
summarize(Anteil.0 = sum(Versuch.0)/n(),
Anteil.1 = sum(Versuch.1)/n())
Hoffe, damit konnte ich Dir weiterhelfen. Welche Version passt am besten für Dich?
Viele Grüße,
Holger