Ma base de données ressemble à ceci
do.call(dplyr::recode, c(list(data), ref))
Et j'ai une liste de référence qui ressemble à ceci -
ref=list(Male=1,Female=2)
J'aimerais remplacez les valeurs dans la colonne Sexe à l'aide de cette liste de référence, sans ajouter de nouvelle colonne à mon dataframe.
Voici ma tentative
data = data.frame(ID=c(1,2,3,4,5,6,7,8,9,10),
Gender=c('Male','Female','Female','Female','Male','Female','Male','Male','Female','Female'))
Ce qui me donne l'erreur suivante -
aucune méthode applicable pour 'recoder' appliquée à un objet de classe "data.frame"
Toute contribution serait grandement appréciée
5 Réponses :
Une option serait de faire une left_join après stack la liste 'ref' à deux colonnes data.frame
unname(unlist(ref)[as.character(data$Gender)]) #[1] 1 2 2 2 1 2 1 1 2 2
Une approche base R serait
library(dplyr)
left_join(data, stack(ref), by = c('Gender' = 'ind')) %>%
select(ID, Gender = values)
Dans la base R:
data $ Gender = sapply (data $ Gender, function (x) ref [[x]])
Vous pouvez utiliser le facteur , c'est-à-dire
factor(data$Gender, levels = names(ref), labels = ref) #[1] 1 2 2 2 1 2 1 1 2 2
Vous pouvez désélectionner ref pour vous donner un vecteur nommé de codes, puis l'indexer avec vos données:
transform(data,Gender=unlist(ref)[as.character(Gender)]) ID Gender 1 1 1 2 2 2 3 3 2 4 4 2 5 5 1 6 6 2 7 7 1 8 8 1 9 9 2 10 10 2
Étonnamment, celui-là fonctionne également:
data$Gender <- ref[as.character(data$Gender)] #> data # ID Gender # 1 1 1 # 2 2 2 # 3 3 2 # 4 4 2 # 5 5 1 # 6 6 2 # 7 7 1 # 8 8 1 # 9 9 2 # 10 10 2