1
votes

Puis-je créer une nouvelle variable numérique à l'aide des opérateurs dplyr et <= et> = pour sous-ensembles de valeurs à partir d'un vecteur existant?

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>


1 commentaires

Vous dites que vous avez essayé filter () . Avez-vous essayé comme ceci: test <- mtcars%>% filter (mpg <= 22 & mpg> = 18) ?


3 Réponses :


3
votes

un ifelse dans le mutate devrait, espérons-le, faire l'affaire.

test <- mtcars %>% 
  mutate(mpg_subset = ifelse(mpg<=22 & mpg >=18, mpg, NA))


2 commentaires

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))



2
votes

Essayez ceci:

library(dplyr)
test <- mtcars %>% 
  mutate(mpg_subset = case_when(between(mpg,18,22) ~ mpg))


0 commentaires

2
votes

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.


1 commentaires

Ou as.data.table (mtcars) [mpg% entre% c (18, 22), mpg_subset: = mpg] []