R 将数据帧中列中的值转换为它们自己的指示符列

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

如果数据框中有一列(变量)包含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   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])))