我有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
答案 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))