调查问卷已通过教师检查他们的课程偏好。他们不得不从大约50个选项中选择20个项目。 结果数据是以下类型的长选项列表: 教师ID,问题ID
我希望将其格式化为一个列表,每个教师都有一行,每个问题的colomn都有可能的值:0(未选中),1(选择)。 在伪代码(编程语言)中 它可能是这样的:
iterate list {
data [teacher_id] [question_id] = 0
}
以下是示例数据和预期结果:
a <- data.frame(
Case_ID = c(1,1,2,2,4,4),
Q_ID = c(3,5,5,8,2,6)
)
预期结果是
res <- data.frame(
Case_ID = c(1,2,4),
Q_1 = c(0,0,0),
Q_2 = c(0,0,1),
Q_3 = c(1,0,0),
Q_4 = c(0,0,0),
Q_5 = c(1,1,0),
Q_6 = c(0,0,1),
Q_7 = c(0,0,0),
Q_8 = c(0,1,0)
)
非常感谢任何帮助。
TNX HED
答案 0 :(得分:2)
返回matrix
并使用matrix
索引来完成工作:
m <- matrix(0, nrow=3, ncol=8)
rownames(m) <- c(1,2,4)
colnames(m) <- 1:8
idx <-apply(a, 2, as.character)
m[idx] <- 1
m
## 1 2 3 4 5 6 7 8
## 1 0 0 1 0 1 0 0 0
## 2 0 0 0 0 1 0 0 1
## 4 0 1 0 0 0 1 0 0
答案 1 :(得分:0)
请注意,您可以将a
视为一个列表,这些列表本身会引用“主数组”中的哪些单元格为TRUE
。
然后,如果你有一个主矩阵,比如所有res
的{{1}},那么你可以告诉0'
:“R
中引用的所有元素都应该是{ {1}}”
这在下面完成
首先我们创建“主矩阵”
a
接下来我们将a转换为一组索引 *请注意,只有在没有教师ID的情况下才需要下面的前两行。即在您的示例中,T_3不存在*
1