df1 <-
data.frame(c("männlich", "weiblich", "männlich"),
c("1", "2", "3", "4", "5", "6"),
seq(141, 170))
names(df1) = c("geschlecht", "alter", "größe")
df1$alter <- factor(
df1$alter,
levels = c(1, 2, 3, 4, 5, 6),
labels = c("16-24", "25-34", "35-44", "45-54", "55-64", "65+")
)
q1a = c(1, 0, 1, 0, 0, 1)
q1b = c(0, 0, 2, 2, 2, 0)
q1c = c(0, 0, 3, 3, 0, 3)
# 1,2 and 3 used to be compatible with existing datasets.
# Could change all to 1 if necessary.
df2 <- data.frame(q1a = q1a, q1b = q1b, q1c = q1c)
df1 <- cbind(df1, df2)
rm(q1a, q1b, q1c, df2)
Ich versuche die Analyse von Mehrfachantwortenfragen aus SPSS in R zu replizieren.
Derzeit verwende ich diesen Code:
#Funktion erstellen zur Analyse von Fragen mit gruppierten Daten
multfreqtable <- function(a, b, c) {
# Anzahl der Befragten (für Prozent der Fälle)
totrep = sum(a == 1 | b == 2 | c == 3)
#Frequenztabelle erstellen
table_a = data.frame("a", sum(a == 1))
names(table_a) = c("frage", "freq")
table_b = data.frame("b", sum(b == 2))
names(table_b) = c("frage", "freq")
table_c = data.frame("c", sum(c == 3))
names(table_c) = c("frage", "freq")
table_question <- rbind(table_a, table_b, table_c)
#Einzelne Frage-Tabellen entfernen
rm(table_a, table_b, table_c)
#Gesamtsumme hinzufügen
total = as.data.frame("Gesamt")
totalsum = (sum(table_question$freq, na.rm = TRUE))
totalrow = cbind(total, totalsum)
names(totalrow) = c("frage", "freq")
table_question = rbind(table_question, totalrow)
#Prozent-Spalte zur Frequenztabelle hinzufügen
percentcalc = as.numeric(table_question$freq)
percent = (percentcalc / totalsum) * 100
table_question <- cbind(table_question, percent)
#Prozent der Fälle-Spalte zur Frequenztabelle hinzufügen
poccalc = as.numeric(table_question$freq)
percentofcases = (poccalc / totrep) * 100
table_question <- cbind(table_question, percentofcases)
#Prozent der Fälle Wert ausdrucken
total_respondents <<- data.frame(totrep)
#Alle unnötigen Daten und Werte entfernen
rm(
total,
totalsum,
totalrow,
b,
c,
percent,
percentcalc,
percentofcases,
totrep,
poccalc
)
return(table_question)
}
#Funktion aufrufen - muss an data.frame mit $ gebunden sein !!!
q1_frequency <- multfreqtable(df1$q1a, df1$q1b, df1$q1c)
#Prozent der Fälle umbenennen - Dies ist sehr wichtig bei Verwendung der aktuellen Methode
total_respondents_q1 <- total_respondents
rm(total_respondents)
Ergebnis: Diese Tabelle wird produziert:
Ich suche nach einer effizienteren Methode, die idealerweise keine Änderung der Funktion erfordert, wenn es mehr oder weniger Multiple-Choice-Fragen gibt.