Meine Frage hat starke Ähnlichkeiten mit this one und this other one, aber mein Datensatz ist ein bisschen anders und ich kann nicht scheinen, dass diese Lösungen funktionieren . Bitte entschuldigen Sie, wenn ich etwas missverstanden habe und diese Frage überflüssig ist.R - Konvertieren Sie verschiedene Dummy/logische Variablen in eine einzige kategoriale Variable/Faktor aus ihrem Namen
Ich habe einen Datensatz wie diese:
df <- data.frame(
id = c(1:5),
conditionA = c(1, NA, NA, NA, 1),
conditionB = c(NA, 1, NA, NA, NA),
conditionC = c(NA, NA, 1, NA, NA),
conditionD = c(NA, NA, NA, 1, NA)
)
# id conditionA conditionB conditionC conditionD
# 1 1 1 NA NA NA
# 2 2 NA 1 NA NA
# 3 3 NA NA 1 NA
# 4 4 NA NA NA 1
# 5 5 1 NA NA NA
(Beachten Sie, dass abgesehen von diesen Spalten, ich habe eine Menge von anderen Spalten, die nicht von der aktuellen Manipulation betroffen sein sollten.)
so, ich beobachte, dass conditionA
, conditionB
, conditionC
und conditionD
sind für beide Seiten exclusives und besser werden sollte, als eine einzelne kategoriale Variable dargestellt, dh factor
, dass sollte wie folgt aussehen:
# id type
# 1 1 conditionA
# 2 2 conditionB
# 3 3 conditionC
# 4 4 conditionD
# 5 5 conditionA
Ich habe mit gather
oder unite
von tidyr
untersucht, aber es entspricht nicht diesen Fall (mit unite
wir die Informationen aus dem Variablennamen verlieren).
Ich versuchte mit kimisc::coalescence.na
, wie in der ersten Antwort vorgeschlagen, aber 1. Ich brauche zuerst einen Faktor Wert basierend auf dem Namen für jede Spalte, 2. Es funktioniert nicht wie erwartet, nur einschließlich der ersten Säule:
library(kimisc)
# first, factor each condition with a specific label
df$conditionA <- df$conditionA %>%
factor(levels = 1, labels = "conditionA")
df$conditionB <- df$conditionB %>%
factor(levels = 1, labels = "conditionB")
df$conditionC <- df$conditionC %>%
factor(levels = 1, labels = "conditionC")
df$conditionD <- df$conditionD %>%
factor(levels = 1, labels = "conditionD")
# now coalesce.na to merge into a single variable
df$type <- coalesce.na(df$conditionA, df$conditionB, df$conditionC, df$conditionD)
df
# id conditionA conditionB conditionC conditionD type
# 1 1 conditionA <NA> <NA> <NA> conditionA
# 2 2 <NA> conditionB <NA> <NA> <NA>
# 3 3 <NA> <NA> conditionC <NA> <NA>
# 4 4 <NA> <NA> <NA> conditionD <NA>
# 5 5 conditionA <NA> <NA> <NA> conditionA
habe ich versucht, die anderen Vorschläge aus der zweiten Frage, haben aber keinen gefunden, der mir das erwartete Ergebnis bringen würde ...
einen Dummy als 'NA' /' Encoding 1 'statt '0' /' 1' hat keine Oberseite, die ich kenne. Ich habe das in letzter Zeit sehr oft auf SO gesehen. – Frank
@Frank: Eigentlich wurde es nicht als Dummy-Variable gedacht (zB für Regression): Ich habe alle diese Daten in Excel manuell eingegeben und jedes Mal eine '1' gesetzt, wenn eine Bedingung erfüllt war (und nicht den Rest gefüllt hat) mit '0'). Ich bin nicht sicher, ob ich das eine Dummy-Variable nennen sollte (aber das ist der Begriff, dem ich begegnet bin) ... –