如何将列表中的项表示为二进制?

时间:2016-03-02 15:26:38

标签: r list matrix binary

我有5列数据(ID,Q_1,Q_2,Q_3,Q_4)。 ID列包含学生编号(122 -127)。 Q_1专栏有学生答案(Q-1_A-4,Q-1_A-12 ......) Q_2栏有学生答案(Q-2_A-2,Q-2_A-3 ...) Q_3和Q4栏有学生答案(T,F)

我想在R中创建一个矩阵。例如;对于每个ID,如果给出Q-1_A-4,矩阵应该包括1,如果没有给出,矩阵应该包括0.输入样本和所需的输出样本如下所示。

如果有人可以帮我编写R中的这个案例,我会很高兴的。感谢。

输入:

ID   Q_1        Q_2            Q_3      Q_4

122  Q-1_A-4                   F         F          
123  Q-1_A-4    Q-2_A-2        F         T  
124  Q-1_A-35   Q-2_A-2        T         F  
125  Q-1_A-14   Q-2_A-4        F         T  
126  Q-1_A-14   Q-2_A-2        F         F  
127  Q-1_A-4    Q-2_A-3        F         F  

期望的输出:

ID   Q-1_A-4    Q-1_A-14   Q-1_A-35   Q-2_A-2    Q-2_A-4  .....

122  1          0              0         0         0
123  1          0              0         1         0 
124  0          0              1         1         0 
125  0          1              0         0         1  
126  0          1              0         1         0
127  1          0              0         0         0 

1 个答案:

答案 0 :(得分:1)

我们可以使用mtabulate

中的library(qdapTools)
library(qdapTools)
d1 <- mtabulate(as.data.frame(t(df1[-1])))
`row.names<-`(cbind(df1[1],d1[grep("^Q", names(d1))]), NULL)
#   ID Q-1_A-4 Q-2_A-2 Q-1_A-35 Q-1_A-14 Q-2_A-4 Q-2_A-3
#1 122       1       0        0        0       0       0
#2 123       1       1        0        0       0       0
#3 124       0       1        1        0       0       0
#4 125       0       0        0        1       1       0
#5 126       0       1        0        1       0       0
#6 127       1       0        0        0       0       1

数据

df1 <- structure(list(ID = 122:127, Q_1 = c("Q-1_A-4", 
 "Q-1_A-4", "Q-1_A-35", 
"Q-1_A-14", "Q-1_A-14", "Q-1_A-4"), Q_2 = c("", 
"Q-2_A-2", "Q-2_A-2", 
"Q-2_A-4", "Q-2_A-2", "Q-2_A-3"), Q_3 = c(FALSE, FALSE, 
 TRUE, 
FALSE, FALSE, FALSE), Q_4 = c(FALSE, TRUE, FALSE, TRUE, FALSE, 
FALSE)), .Names = c("ID", "Q_1", "Q_2", "Q_3", "Q_4"), 
class = "data.frame", row.names = c(NA, -6L))