从多个列中生成虚拟变量并创建新的dataframe

从多个列中生成虚拟变量并创建新的dataframe,r,dataframe,dummy-variable,R,Dataframe,Dummy Variable,我需要根据调查数据制作一个数据框,其中受访者在数据框的几列中陈述了单词。这里有一个简单的例子来说明我需要做什么?这里一个单词用一个字母表示 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.

我需要根据调查数据制作一个数据框,其中受访者在数据框的几列中陈述了单词。这里有一个简单的例子来说明我需要做什么?这里一个单词用一个字母表示

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

有什么想法吗?

您可以使用
重塑2

library(reshape2)
dcast( melt(df,id.var="id"), id ~ value, length)

  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
或者使用
重铸
来“一步熔化和铸造”:


不使用包,您可以执行
表(rep(df$id,ncol(df)-1),unlist(df[-1])

v.X代表什么?您希望如何将这些减少到您想要的输出?你需要计数吗?例如,如果
ID1
行是
“a”、“b”、“a”
,你希望a是2吗?v.X中的内容是单个单词,因此它们是字符向量。受访者只能选择一个单词,因此无需求和或计数。看看弗兰克对我所写内容的回答!请参阅前面使用
model.matrix()
的答案…我刚想说Reforme2可以做到这一点。。。回答得好!
  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
recast(df, id ~ value, id.var = "id", length)