J'ai besoin de faire une base de données de mannequins à partir de l'enquêtedonnées où les répondants ont déclaré des mots dans plusieurs colonnes d'une trame de données. Voici un exemple simplifié pour illustrer ce que je dois faire? Un seul mot est ici représenté par une lettre.
id <- c(1:6)
v.1 <- c("a","b","d","e","a","c")
v.2 <- c("b","a","a","a","b","a")
v.3 <- c("e","c","b","b","e","b")
df <- data.frame(id,v.1,v.2,v.3)
> df
id v.1 v.2 v.3
1 1 a b e
2 2 b a c
3 3 d a b
4 4 e a b
5 5 a b e
6 6 c a b
Voici ma sortie souhaitée?
> print(df.dummy)
id a b c d e
1: 1 1 1 0 0 1
2: 2 1 1 1 0 0
3: 3 1 1 0 1 0
4: 4 1 1 0 0 1
5: 5 1 1 0 0 1
6: 6 1 1 1 0 0
Des idées?
Réponses:
7 pour la réponse № 1Vous pouvez utiliser reshape2
:
library(reshape2)
dcast( melt(df,id.var="id"), id ~ value, length)
qui donne
id a b c d e
1 1 1 1 0 0 1
2 2 1 1 1 0 0
3 3 1 1 0 1 0
4 4 1 1 0 0 1
5 5 1 1 0 0 1
6 6 1 1 1 0 0
Ou utiliser recast
pour "fondre et couler en une seule étape":
recast(df, id ~ value, id.var = "id", length)
Sans utiliser de package, vous pourriez faire table( rep(df$id,ncol(df)-1), unlist(df[-1]) )
.