R-将单个列转换为多个1和0列

R-将单个列转换为多个1和0列,r,R,我有一个如下所示的数据集: data_original <- matrix(c("class1","class2","class3","class1","class2","class3","class1","class2","class3"),ncol=1,byrow=TRUE) colnames(data_original) <- c("class") rownames(data_original) <- c("student1","student2","student3",

我有一个如下所示的数据集:

data_original <- matrix(c("class1","class2","class3","class1","class2","class3","class1","class2","class3"),ncol=1,byrow=TRUE)
colnames(data_original) <- c("class")
rownames(data_original) <- c("student1","student2","student3","student1","student2","student3","student1","student2","student3")
data_original <- as.table(data_original)
data_original

         class 
student1 class1
student2 class2
student3 class3
student1 class1
student2 class2
student3 class3
student1 class1
student2 class2
student3 class3
data_req <- matrix(c(1,1,0,1,0,0,1,1,0),ncol=3,byrow=TRUE)
colnames(data_req) <- c("class1","class2","class3")
rownames(data_req) <- c("student1","student2","student3")
data_req <- as.table(data_req)
data_req

        class1 class2 class3
student1      1      1      0
student2      1      0      0
student3      1      1      0

data\u original我认为如果您可以将数据转换为数据帧,工作会更轻松

df <- data.frame(student=rownames(data_original), class=data_original[,1])

我认为,如果您可以将数据转换为数据帧,那么工作会更轻松

df <- data.frame(student=rownames(data_original), class=data_original[,1])

给定所需的输出,似乎输入应该如下(作为数据帧)

一个
tidyr
解决方案如下

library(dplyr)
library(tidyr)

data_original %>% spread(class, val)

给定所需的输出,似乎输入应该如下(作为数据帧)

一个
tidyr
解决方案如下

library(dplyr)
library(tidyr)

data_original %>% spread(class, val)

我们可以使用
xtabs

xtabs(val~student+class, data_original)
#             class
#student    class1 class2 class3
#  student1      1      1      0
#  student2      1      0      0
#  student3      1      1      0

我们可以使用
xtabs

xtabs(val~student+class, data_original)
#             class
#student    class1 class2 class3
#  student1      1      1      0
#  student2      1      0      0
#  student3      1      1      0

您的输出与您的输入不匹配。您的输入实际上是一个
,还是一个data.frame?非常接近于它的副本。要转换的原始数据似乎不正确。似乎学生和班级的顺序应该是“1,2,3”和“1,1,1”,其中上面的数据是“1,2,3”和“1,2,3”。对不起,是的,输出不匹配,我想提供一个我想要的输出类型的示例。我想不起这张桌子的名字@最近的邮件-是的,我的看起来像是重复的。我想不出要搜索的名称,我想二进制表是个不错的名称。您的输出与输入不匹配。您的输入实际上是一个
,还是一个data.frame?非常接近它的副本,似乎要转换的原始数据不正确。似乎学生和班级的顺序应该是“1,2,3”和“1,1,1”,其中上面的数据是“1,2,3”和“1,2,3”。对不起,是的,输出不匹配,我想提供一个我想要的输出类型的示例。我想不起这张桌子的名字@最近的邮件-是的,我的看起来像是重复的。我想不出要搜索的名称,我想二进制表是个好名称。或者
重铸(data\u original,student~value,id.var=“student”)
或者
重铸(data\u original,student~value,id.var=“student”)