Je suis un nouveau venu dans dplyr et j'ai essayé de créer une nouvelle variable composite à partir de trois variables d'âge différentes en utilisant dplyr et ifelse
. J'ai fait un cadre de données pour expliquer la situation comme suit :
library(dplyr)
z <- data.frame("j6" = c(6, 19, NA, NA, NA, NA, NA, 8, 20, 20, NA),
"j7" = c(27, 20, NA, 7, 19, NA, NA, 20, 30, 9, NA),
"j8" = c(8, 22, NA, 20, NA, 8, 30, NA, NA, NA, 3))
z <- z %>%
mutate(., age_event = NA) %>%
mutate(., age_event = ifelse(j6 < 18 | j7 < 18 | j8 < 18, 1, 0))
Mes attentes :
- Les trois colonnes (j6, j7 et j8) indiquent les âges, et si au moins l'un d'entre eux est âgé de moins de 18 ans, la nouvelle colonne (age_event) doit être "1", sinon 0.
- Et si deux des trois colonnes sont toutes deux âgées de 18 ans ou plus et que l'autre est NA, la variable age_event doit être 0 .
- De même, si l'une des trois colonnes est 18 ans ou plus et que les autres sont NA, la variable age_event doit être égale à 0.
- Il est également NA si les trois colonnes sont NA.
Cependant, le résultat et les problèmes sont présentés comme suit :
> z
j6 j7 j8 age_event
1 6 27 8 1
2 19 20 22 0
3 NA NA NA NA
4 NA 7 20 1
5 NA 19 NA NA <-- should be 0, but NA
6 NA NA 8 1
7 NA NA 30 NA <-- should be 0, but NA
8 8 20 NA 1
9 20 30 NA NA <-- should be 0, but NA
10 20 9 NA 1
11 NA NA 3 1
J'aimerais savoir s'il y a un moyen de transformer les 5ème, 7ème et 9ème observations ci-dessus en 0 en utilisant mutate
y ifelse
. Toute suggestion serait grandement appréciée !
Mise à jour (27/02/2020) : J'ai trouvé une solution avec pmin
lors de l'utilisation de mutate
y ifelse
:
z <- z %>%
mutate(., age_event = ifelse(is.na(j6) & is.na(j7) & is.na(j8), NA,
ifelse(pmin(j6, j7, j8, na.rm = T) < 18, 1, 0)))
> z
j6 j7 j8 age_event
1 6 27 8 1
2 19 20 22 0
3 NA NA NA NA
4 NA 7 20 1
5 NA 19 NA 0
6 NA NA 8 1
7 NA NA 30 0
8 8 20 NA 1
9 20 30 NA 0
10 20 9 NA 1
11 NA NA 3 1