Ich habe ein data.frame, das mehrere Variablen mit Nullwerten hat. Ich muss eine zusätzliche Variable konstruieren, die die Kombination von Variablen zurückgibt, die für jede Beobachtung nicht Null sind. Z.B.Wie erstellt man eine Kombinationsvariable in R data.frame?
df <- data.frame(firm = c("firm1", "firm2", "firm3", "firm4", "firm5"),
A = c(0, 0, 0, 1, 2),
B = c(0, 1, 0, 42, 0),
C = c(1, 1, 0, 0, 0))
Nun möchte Ich mag die neue Variable generieren:
df$varCombination <- c("C", "B-C", NA, "A-B", "A")
ich so etwas wie dies erdacht, was natürlich nicht funktioniert:
for (i in 1:nrow(df)){
df$varCombination[i] <- paste(names(df[i,2:ncol(df) & > 0]), collapse = "-")
}
Dank! Alle bisher vorgeschlagenen Lösungen funktionieren wunderbar. Es ist also nur Sache meines Geschmacks, deine Version als die sauberste zu wählen. Es fehlt der NA-Ersatz, aber das war nicht der Stolperstein. – Antti
@Antti es ist nicht nur eine Frage des Geschmacks. Row-wise Operationen sind contr-intuitiv in R eine vecotirzed Sprache und alle. Sie haben die langsamste Lösung mit Abstand gewählt. Sehen Sie einige Benchmarks in meiner Antwort. Also definiere "* neatest *" während du dabei bist. –
@DavidArenburg Ich stimme absolut zu, dass reihenweise Schleife in R keine schnelle Lösung ist. Zu meiner Verteidigung glaube ich, dass die Schleife es ein wenig klarer macht, was passiert und ich versuchte, es nahe am ursprünglichen Code zu halten, so dass die Logik dem Fragesteller leichter folgen würde. –