行数据到二进制列,同时保留行数

Row data to binary columns while preserving the number of rows

这类似于这个问题R Convert row data to binary columns,但我想保留行数。

如何在保留行数的同时将行数据转换为二进制列?

例子

输入

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

如何达到预期的输出?

   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

我们可以使用dcast来做到这一点

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

或将 base Rcbind 中的 table 与原始数据集一起使用

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

也许是不依赖于其他包的更简单的解决方案:

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