R 将数据帧中列中的值转换为它们自己的指示符列
如果数据框中有一列(变量)包含3个值,我想为这些值中的每一个创建一个新列,如果值为真,则为1,如果值为非真,则为0。比如说,R 将数据帧中列中的值转换为它们自己的指示符列,r,dataframe,dplyr,R,Dataframe,Dplyr,如果数据框中有一列(变量)包含3个值,我想为这些值中的每一个创建一个新列,如果值为真,则为1,如果值为非真,则为0。比如说, one=data.frame(id=c(1:6), status=c("good", "bad", "ok", "ok", "good", "bad")) # should turn into #id good bad ok #1 1 0
one=data.frame(id=c(1:6), status=c("good", "bad", "ok", "ok", "good", "bad"))
# should turn into
#id good bad ok
#1 1 0 0
#2 0 1 0
#3 0 0 1
#4 0 0 1
#5 1 0 0
#6 0 1 0
是否可以用一行代码对多个列执行此操作?我有64列
multiple=data.frame(id=c(1:6),
status=c("good", "bad", "ok", "ok", "good", "bad"),
breakfast=c("eggs", "sausage", "eggs", "sausage", "sausage", "eggs"))
谢谢 我们可以使用
表格
out <- as.data.frame.matrix(table(one))
第二种情况
out_lst <- lapply(names(multiple)[-1], function(x)
as.data.frame.matrix(table(multiple[c('id', x)])))
我们可以使用cbind
out2 <- do.call(cbind, out_lst)
out2
# bad good ok eggs sausage
#1 0 1 0 1 0
#2 1 0 0 0 1
#3 0 0 1 1 0
#4 0 0 1 0 1
#5 0 1 0 0 1
#6 1 0 0 1 0
out_lst
[[1]]
bad good ok
1 0 1 0
2 1 0 0
3 0 0 1
4 0 0 1
5 0 1 0
6 1 0 0
[[2]]
eggs sausage
1 1 0
2 0 1
3 1 0
4 0 1
5 0 1
6 1 0
out2 <- do.call(cbind, out_lst)
out2
# bad good ok eggs sausage
#1 0 1 0 1 0
#2 1 0 0 0 1
#3 0 0 1 1 0
#4 0 0 1 0 1
#5 0 1 0 0 1
#6 1 0 0 1 0
library(qdapTools)
mtabulate(as.data.frame(t(multiple[-1])))