2017-02-22 2 views
1

J'ai essayé d'utiliser la variante dplyr de recode, combinée avec mutate_all sur toutes les variables dans un ensemble de données, mais elle ne donne pas la sortie attendue. D'autres réponses que je trouve ne traite pas ce problème (par exemple Recode and Mutate_all in dplyr)Comment utiliser mutate_all et recoder ensemble correctement en utilisant dplyr?

Voici ce que j'ai essayé:

library(tidyverse) 
library(car) 

# Create sample data 
df <- data_frame(a = c("Yes","Maybe","No","Yes"), b = c("No","Maybe","Yes","Yes")) 

# Using dplyr::recode 
df %>% mutate_all(funs(recode(., `1` = "Yes", `0` = "No", `NA` = "Maybe"))) 

Aucun effet sur les valeurs:

# A tibble: 4 × 2 
     a  b 
    <chr> <chr> 
1 Yes No 
2 Maybe Maybe 
3 No Yes 
4 Yes Yes 

Ce que je veux peut être reproduit à l'aide voiture :: Recode:

# Using car::Recode 
df %>% mutate_all(funs(Recode(., "'Yes' = 1; 'No' = 0; 'Maybe' = NA"))) 

Ceci est le résultat souhaité:

# A tibble: 4 × 2 
     a  b 
    <dbl> <dbl> 
1  1  0 
2 NA NA 
3  0  1 
4  1  1 
+0

Cela peut être fait sans utiliser 'recode' trop – akrun

+0

Je sais que cela peut être fait, mais je voudrais savoir ce que suis Je manque avec dplyr :: recode. Je voudrais éviter les solutions de type ifelse. –

+0

Pas la réponse, mais une alternative simple: 'df [] <- facteur (unlist (df), niveaux = c (" Oui "," Non "," Peut-être "), labels = c (1, 0, NA)) ' –

Répondre

5

Vous avez inversé les 'clés/valeurs' dans dplyr::recode. Cela fonctionne pour moi:

df %>% mutate_all(funs(recode(., Yes = 1L, No = 0L, Maybe = NA_integer_))) 

# A tibble: 4 × 2 
     a  b 
    <dbl> <dbl> 
1  1  0 
2 NA NA 
3  0  1 
4  1  1 

Notez qu'il renvoie une erreur si vous ne spécifiez pas le type de NA.

vous pouvez utiliser cité ou de la valeur non indiquée aussi (par exemple: Les deux travaux Yes ou 'Yes')

+1

droit, et vous ne même pas besoin de citer les Oui, non etc –

+0

Great, merci pour l'aide. J'étais un peu confus par les exemples de documentation, mais je suppose que c'est ma mauvaise! –