Le mutate peut-il être utilisé lorsque la mutation est conditionnelle (en fonction des valeurs de certaines valeurs de colonne)?
Cet exemple aide à montrer ce que je veux dire.
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
J'espérais trouver une solution à mon problème en utilisant le package dplyr (et oui je sais que ce n'est pas du code qui devrait fonctionner, mais je suppose que cela rend le but clair) pour créer une nouvelle colonne g:
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})
Le résultat du code que je recherche devrait avoir ce résultat dans cet exemple particulier:
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
Quelqu'un a-t-il une idée sur la façon de faire cela dans dplyr? Cette trame de données n'est qu'un exemple, les trames de données dont je traite sont beaucoup plus grandes. En raison de sa vitesse, j'ai essayé d'utiliser dplyr, mais peut-être existe-t-il d'autres meilleurs moyens de gérer ce problème?
dplyr::case_when()
c'est beaucoup plus clair qu'unifelse
,