Hallo zusammen,
ich beschäftige mich gerade mit dem Datenhandling (u.a. mit dem Paket dplyr). Eine Sache kriege ich nicht hin und mit meiner bisherigen Suche bin ich auch nicht fündig geworden. Daher hoffe ich, dass ihr mir weiterhelfen könnt
Ich möchte: Aus mehreren Fragen div. Mittelwerte bilden und diese als neue Zeile im gleichen Datensatz speichern.
(Optional: Am Schluss die bisherigen Items bzw. Fragen löschen)
Situation: Ich habe einen Fragebogen mit 25 Fragen. Der Fragebogen erfasst ein Konstrukt mit 5 Dimensionen mit je 5 Fragen. Zu jeder Dimension soll ein Mittelwert gebildet werden und ein Gesamtmittelwert für den gesamten Fragebogen.
D.h. ich habe 6 neue Spalten bzw. Variablen. Die Werte sollen weiterhin pro Zeile / Teilnehmer gespeichert werden (für spätere Regression etc.) und die neuen Variablen sollen weiterhin numerisch sein.
In Excel würde ich das z.B. so machen:
Neue Spalte "Dimension1" und pro Zeile/Teilnehmer einen Mittelwert mit der Funktion "=MITTELWERT(P4+R4+T4+V4+X4)".
Neue Spalte "Dimension2" und pro Zeile einen Mittelwert mit der Funktion "=MITTELWERT(...)".
usw...
Wie kann ich so etwas in R machen?
ich habe schon diverse Funktionen wie "summarise, aggregate, convert, mutate, transmute" ausprobiert, aber ich schaffe es einfach nicht
Vielen Dank im Voraus!
div. Mittelwerte als neue Spalten im gleichen Datensatz
Re: div. Mittelwerte als neue Spalten im gleichen Datensatz
Hallo!
Ich spreche leider kein dplyr, daher zeige ich Dir mal, wie man das ohne macht:
HTH,
Bernhard
Ich spreche leider kein dplyr, daher zeige ich Dir mal, wie man das ohne macht:
Code: Alles auswählen
bsp <- data.frame(id = LETTERS[1:20], a1 = rep(1, 20), a2 = rep(2, 20),
b1 = rep(10,20), b2 = rep(20, 20), b3 = rep(30, 20),
c1 = runif(10, 210, 220), c2 = runif(10, 210, 220), c3 = runif(10, 210, 220))
head(bsp) # der Beispieldatensatz ist sehr eintönig, dafür lässt sich leicht nachrechnen,
# ob die Summen nachher stimmen
bsp$a.summe <- rowSums(bsp[2:3], na.rm = FALSE) # Ansprechen über Spaltennummer
bsp$b.summe <- rowSums(bsp[4:6], na.rm = FALSE)
bsp$c.summe <- rowSums(bsp[c("c1", "c2", "c3")]) # alternativ über Spaltennamen
head(bsp)
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: div. Mittelwerte als neue Spalten im gleichen Datensatz
Hallo Bernhard,
super, vielen Dank für die schnelle Hilfe!
Jetzt habe ich noch eine Frage: Gibt es auch einen Befehl wie man eine Spalte anhand des Spaltennamens wieder löscht?
Da ich 4 Fragebögen in einem Datensatz verwende, würde ich die entsprechende Variable gerne immer konkret ansprechen und ungerne über z.B.:
super, vielen Dank für die schnelle Hilfe!
Jetzt habe ich noch eine Frage: Gibt es auch einen Befehl wie man eine Spalte anhand des Spaltennamens wieder löscht?
Da ich 4 Fragebögen in einem Datensatz verwende, würde ich die entsprechende Variable gerne immer konkret ansprechen und ungerne über z.B.:
Code: Alles auswählen
bsp <- bsp[-7]
Re: div. Mittelwerte als neue Spalten im gleichen Datensatz
Eigentlich würde ich es vermeiden, solche Spalten zu löschen und würde mir stattdessen Kopien anlegen, in denen nur die gewünschten Spalten erhalten bleiben. Erfahrungsgemäß will man auf überschriebene Daten später doch nochmal zugreifen.
Die andere Antwort lautet so:
LG,
Bernhard
Die andere Antwort lautet so:
Code: Alles auswählen
bsp <- data.frame(id = LETTERS[1:20], a1 = rep(1, 20), a2 = rep(2, 20),
b1 = rep(10,20), b2 = rep(20, 20), b3 = rep(30, 20),
c1 = runif(10, 210, 220), c2 = runif(10, 210, 220), c3 = runif(10, 210, 220))
head(bsp)
bsp[c("a1", "a2", "c1", "c2", "c3")] <- NULL
head(bsp)
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: div. Mittelwerte als neue Spalten im gleichen Datensatz
Hallo Bernhard,
das hat mir sehr geholfen, vielen Dank!
Ich habe jetzt noch eine Zeile ergänzt: Damit ich auf meine Mittelwerte komme muss ich die Summe ja noch durch die Anzahl der Werte teilen.
Liebe Grüße
Nulli
das hat mir sehr geholfen, vielen Dank!
Ich habe jetzt noch eine Zeile ergänzt: Damit ich auf meine Mittelwerte komme muss ich die Summe ja noch durch die Anzahl der Werte teilen.
Code: Alles auswählen
bsp$c.summe <- rowSums(bsp[c("c1", "c2", "c3")])
bsp$c.mean <- (bsp$c.summe/3)
bsp[c("c1", "c2", "c3", "c.summe")] <- NULL
Nulli
Re: div. Mittelwerte als neue Spalten im gleichen Datensatz
Hallo Nulli,
ich hatte übersehen, dass es um Mittelwerte und nicht um Summen geht. In dem Fall möchtest Du vielleicht anstelle der Funktion rowSums auf die Funktion rowMeans zurückgreifen. Die macht zwar zunächst nichts anderes als Du es jetzt händisch gemacht hast, aber die Funktion rowMeans hat ein Argument na.rm das hilfreich werden kann, wenn Leute bei einzelnen Items nichts angekreuzt haben:
Wähle mit Bedacht. Wenn häufig NA vorkommen willst Du das vielleicht lieber ausführlich selbst bearbeiten, für ein paar wenige kann rowMeans eine erhebliche Erleichterung sein.
LG,
Bernhard
ich hatte übersehen, dass es um Mittelwerte und nicht um Summen geht. In dem Fall möchtest Du vielleicht anstelle der Funktion rowSums auf die Funktion rowMeans zurückgreifen. Die macht zwar zunächst nichts anderes als Du es jetzt händisch gemacht hast, aber die Funktion rowMeans hat ein Argument na.rm das hilfreich werden kann, wenn Leute bei einzelnen Items nichts angekreuzt haben:
Code: Alles auswählen
bsp <- data.frame(a = c(1, 3, 2, 4, 1, 1, 1, NA, 5, 6, NA),
b = c(NA, NA, 5, 5, 2, 3, 1, 1, 2, 1, NA))
rowSums(bsp[c("a", "b")]) / 2
rowMeans(bsp[c("a", "b")], na.rm = TRUE)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte