J'ai une variable qui a une très large plage de valeurs. Je souhaite créer une nouvelle variable dans ma trame de données qui constitue un sous-ensemble de ces valeurs, avec toutes les valeurs d'origine qui ne sont pas dans la plage spécifiée pour le sous-ensemble répertorié comme NA. J'ai essayé de faire cela avec mutate dans dplyr mais la variable qui est retournée est un vecteur logique.
Par exemple avec mtcars, j'ai essayé:
test <- mtcars %>% mutate(mpg_subset = mpg<=22) %>% mutate(mpg_subset=mpg_subset>=18)
Ici , Je veux une nouvelle variable numérique appelée mpg_subset qui contient uniquement les valeurs où mpg est = 18, et où toutes les valeurs qui ne sont pas dans ces limites sont étiquetées comme NA.
Malheureusement, quoi Je reviens est un vecteur logique pour mpg_subset qui me dit si la valeur d'origine de mpg remplit ces conditions (VRAI ou FAUX), plutôt qu'un vecteur numérique. J'ai également essayé d'utiliser la fonction de filtre mais j'ai obtenu le même résultat. Je suis nouveau sur dplyr, donc je ne suis pas sûr de ce que je fais de mal!
Quelqu'un peut-il me dire comment j'obtiendrais les données dont j'ai besoin?
Merci beaucoup! p>
3 Réponses :
un ifelse dans le mutate devrait, espérons-le, faire l'affaire.
test <- mtcars %>% mutate(mpg_subset = ifelse(mpg<=22 & mpg >=18, mpg, NA))
Merci beaucoup. Savez-vous comment j'ajouterais cette nouvelle colonne à l'ensemble de données d'origine?
mtcars <- mtcars%>% mutate (mpg_subset = ifelse (mpg <= 22 & mpg> = 18, mpg, NA))
Essayez ceci:
library(dplyr) test <- mtcars %>% mutate(mpg_subset = case_when(between(mpg,18,22) ~ mpg))
Je sais que vous avez spécifié dplyr
, mais si quelqu'un est intéressé par une solution data.table
, cela utilise une instruction ifelse
...
as.data.table(mtcars)[, mpg_subset := ifelse(mpg <= 22 & mpg >= 18, mpg, NA)]
Vous pourriez probablement faire quelque chose de similaire avec dplyr
.
Ou as.data.table (mtcars) [mpg% entre% c (18, 22), mpg_subset: = mpg] []
Vous dites que vous avez essayé
filter ()
. Avez-vous essayé comme ceci:test <- mtcars%>% filter (mpg <= 22 & mpg> = 18)
?