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

时间:2017-06-22 12:20:54

标签: r dataframe crosstab

这与此问题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

2 个答案:

答案 0 :(得分:5)

如果不依赖另一个软件包,也许是一个稍微简单的解决方案:

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

答案 1 :(得分:1)

我们可以使用dcast来执行此操作

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

或者使用tablebase R中的cbind与原始数据集

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