2017-06-22 1 views
1

Ceci est similaire à cette question R Convert row data to binary columns mais je veux préserver le nombre de lignes.Ligne de données à colonnes binaires tout en préservant le nombre de lignes

Comment puis-je convertir les données de ligne en colonnes binaires tout en préservant le nombre de lignes?

Exemple

Entrée

myData<-data.frame(gender=c("man","women","child","women","women","women","man"), 
        age=c(22, 22, 0.33,22,22,22,111)) 


myData 
    gender age 
1 man 22.00 
2 women 22.00 
3 child 0.33 
4 women 22.00 
5 women 22.00 
6 women 22.00 
7 man 111.00 

Comment arriver à ce but sortie?

gender age man women child 
1 man 22.00 1  0  0 
2 women 22.00 0  1  0 
3 child 0.33 0  0  1 
4 women 22.00 0  1  0 
5 women 22.00 0  1  0 
6 women 22.00 0  1  0 
7 man 111.00 1  0  0 

Répondre

5

Peut-être une solution un peu plus facile sans recours sur ano package ther:

data.frame(myData, model.matrix(~gender+0, myData))

+0

Pourquoi cela oblige le '' + 0' autrement X.Intercept'? – hhh

+1

@hhh '+ 0' supprime l'interception et permet ainsi à la catégorie de référence d'être représentée comme une variable fictive. La catégorie de référence est par défaut la première valeur, c'est-à-dire «enfant» dans votre cas car c'est la première dans l'ordre alphabétique des catégories «genre». – jkt

1

Nous pouvons utiliser dcast pour ce faire

library(data.table) 
dcast(setDT(myData), gender + age + seq_len(nrow(myData)) ~ 
          gender, length)[, myData := NULL][] 

Ou utilisez table de base R et cbind avec l'ensemble de données d'origine

cbind(myData, as.data.frame.matrix(table(1:nrow(myData), myData$gender)))