/ / Créer des variables factices à partir de plusieurs colonnes et créer un nouveau cadre de données [dupliquer] - r, cadre de données, variable factice

Créez des variables factices à partir de plusieurs colonnes et créez une nouvelle base de données [duplicate] - r, dataframe, dummy-variable

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 № 1

Vous 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]) ).