行数据到二进制列,同时保留行数
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 R
和 cbind
中的 table
与原始数据集一起使用
cbind(myData, as.data.frame.matrix(table(1:nrow(myData), myData$gender)))
也许是不依赖于其他包的更简单的解决方案:
data.frame(myData, model.matrix(~gender+0, myData))
这类似于这个问题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 R
和 cbind
中的 table
与原始数据集一起使用
cbind(myData, as.data.frame.matrix(table(1:nrow(myData), myData$gender)))
也许是不依赖于其他包的更简单的解决方案:
data.frame(myData, model.matrix(~gender+0, myData))