Kann die Mutation verwendet werden, wenn die Mutation bedingt ist (abhängig von den Werten bestimmter Spaltenwerte)?
Dieses Beispiel zeigt, was ich meine.
structure(list(a = c(1, 3, 4, 6, 3, 2, 5, 1), b = c(1, 3, 4,
2, 6, 7, 2, 6), c = c(6, 3, 6, 5, 3, 6, 5, 3), d = c(6, 2, 4,
5, 3, 7, 2, 6), e = c(1, 2, 4, 5, 6, 7, 6, 3), f = c(2, 3, 4,
2, 2, 7, 5, 2)), .Names = c("a", "b", "c", "d", "e", "f"), row.names = c(NA,
8L), class = "data.frame")
a b c d e f
1 1 1 6 6 1 2
2 3 3 3 2 2 3
3 4 4 6 4 4 4
4 6 2 5 5 5 2
5 3 6 3 3 6 2
6 2 7 6 7 7 7
7 5 2 5 2 6 5
8 1 6 3 6 3 2
Ich hatte gehofft, mit dem Paket dplyr eine Lösung für mein Problem zu finden (und ja, ich weiß, dass dieser Code nicht funktionieren sollte, aber ich denke, er macht den Zweck klar), um eine neue Spalte g zu erstellen:
library(dplyr)
df <- mutate(df,
if (a == 2 | a == 5 | a == 7 | (a == 1 & b == 4)){g = 2},
if (a == 0 | a == 1 | a == 4 | a == 3 | c == 4) {g = 3})
Das Ergebnis des gesuchten Codes sollte dieses Ergebnis in diesem speziellen Beispiel haben:
a b c d e f g
1 1 1 6 6 1 2 3
2 3 3 3 2 2 3 3
3 4 4 6 4 4 4 3
4 6 2 5 5 5 2 NA
5 3 6 3 3 6 2 NA
6 2 7 6 7 7 7 2
7 5 2 5 2 6 5 2
8 1 6 3 6 3 2 3
Hat jemand eine Idee, wie man das in dplyr macht? Dieser Datenrahmen ist nur ein Beispiel, die Datenrahmen, mit denen ich es zu tun habe, sind viel größer. Aufgrund seiner Geschwindigkeit habe ich versucht, dplyr zu verwenden, aber vielleicht gibt es andere, bessere Möglichkeiten, um dieses Problem zu lösen?
dplyr::case_when()
ist viel klarer als einifelse
,