2017-04-13 6 views
1

Ich habe einen Datenrahmen wie folgt aus:verschmelzen mehrere Spalten mit Bedingung

Q17a_17 Q17a_18 Q17a_19 Q17a_20 Q17a_21 Q17a_22 Q17a_23 
1 NA  NA  NA  NA  NA  NA  NA 
2 0  0  0  0  0  0  1 
3 0  0  0  0  0  1  1  
4 0  0  0  0  0  0  1 
5 1  0  0  0  1  1  0 
6 0  0  0  0  0  1  1 
7 1  1  0  0  1  0  1 

Und ich möchte Q17a_17, Q17a_19 und Q17a_23 in einer neuen Spalte mit einem neuen Namen verschmelzen. Die "alten" Spalten Q17a_17, Q17a_19 und Q17a_23 sollten gelöscht werden. In der neuen Spalte sollte nur ein Wert mit den folgenden Bedingungen stehen: "NA", wenn "NA" vorher war, "1" wenn irgendwo "1" als Wert davor war (wie in Zeile 3 oder 4 oder 7) und "0" wenn vorher nur Nullen vorhanden waren. Vielleicht ist dies sehr einfach ist, aber ich kämpfe schon stundenlang ...

Antwort

0

Der Ansatz, den ich hier verwenden ist, zunächst einen Vektor zu berechnen, die NA ist, wenn ein NA Wert in mindestens einer der drei Spalten auftritt, und Null Andernfalls. Außerdem berechnen wir einen Vektor, der das gewünschte numerische Ergebnis enthält. Was Sie wollen, können Sie erhalten, indem Sie die drei Spalten logisch verknüpfen. Dann führt das Addieren dieser zwei berechneten Vektoren zusammen zu dem gewünschten Ergebnis.

na.vector <- df$Q17a_17 * df$Q17a_19 * df$Q17a_23 
na.vector[!is.na(na.vector)] <- 0 
num.vector <- as.numeric(df$Q17a_17 | df$Q17a_19 | df$Q17a_23) 
df$new_column <- na.vector + num.vector 
df <- df[ , -which(names(df) %in% c("Q17a_17", "Q17a_19", "Q17a_23"))] 
Verwandte Themen