Ich versuche, Antworten mit einem Vektor zu rekodieren, der die richtigen Antworten enthält. Ich machte eine for-Schleife, die eine neue Spalte (mit der codierten Antwort) in jeder Schleife unter Verwendung eines Vektors mit den möglichen Namen für die neuen Spalten erzeugt.Übergeben Sie einen Vektor mit zu mutierenden Namen, um mehrere neue Spalten zu erstellen
Es scheint jedoch, dass muate keine Vektoren mit Namen erhält. Ich habe einige verschiedene Vektoren und einige paste0() Kombinationen ausprobiert, aber nichts scheint zu funktionieren.
Hier mein reproduzierbarer Code ist:
library(dplyr)
library(tibble)
correct = c(4, 5, 2, 2, 2, 3, 3, 5, 4, 5, 2, 1, 3, 4, 2, 2, 2, 4, 3, 1, 1, 5, 4, 1, 3, 2)
sub1 = c(3, 5, 1, 5, 4, 3, 2, 5, 4, 3, 4, 4, 4, 1, 5, 1, 4, 3, 3, 4, 3, 2, 4, 2, 3, 4)
df = t(data.frame(sub1))
colnames(df) = paste0("P", 1:26)
new_names = paste0("P", 1:26, "_coded")
for(i in 1:26){
df = as.tibble(df) %>%
mutate(new_names = case_when(.[i] == correct[i] ~ 1,
.[i] != correct[i] ~ 0,
T ~ 9999999))
print(df) # to know what's going on.
}
Auch weiß ich, dass .dots Namen in einem Vektor empfangen kann (glaube ich), aber ich verstehe nicht ganz, wie es im Innern mutiert mit case_when verwenden().
Andere Möglichkeiten, um neue Spalten mit dem umcodiert Wert sind auch willkommen zu erstellen
UPDATE: P26_COD mit möglichen Werten 1 (falls korrekt: der ursprüngliche Datenrahmen mit 26 neuen Spalten, P1_COD wäre Meine erwartete Ausgabe) und 0 (falls falsch).
So etwas (ich habe gerade vier Spalten mit 1s und 0s als Beispiel erstellt).
df %>%
mutate(P1_COD = 1,
P2_COD = 0,
P3_COD = 1,
P4_COD = 1)
Warum die extrem breite Form? In der langen Form ist es einfach: 'data_frame (richtig, sub1, cod = as.integer (richtig == sub1))' – alistaire
Ich empfehle das nicht, aber wenn Sie es in breiter Form behalten wollen, sollte dies funktionieren: ' df <- cbind (df, setNames (as.data.frame (t (wie.numerisch (mapply (\ '== \', df, richtig)))), nm = paste0 (colnames (df), "_COD"))) '. –