这与此问题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
答案 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][]
或者使用table
和base R
中的cbind
与原始数据集
cbind(myData, as.data.frame.matrix(table(1:nrow(myData), myData$gender)))