R将一长串问卷选择转换为每个调查问卷一行的数据框

时间:2013-02-24 20:23:14

标签: r

调查问卷已通过教师检查他们的课程偏好。他们不得不从大约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

2 个答案:

答案 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