2

我有一些包含调查结果的数据框。第一帧列出了调查中每个问题的问题 ID (q_id):

  q_id
1   q1
2   q2
3   q3

第二个数据框为每个主题 (s_id) 保存主题响应的每个问题的响应 (res)。主题可以跳过问题:

  s_id q_id res
1    1   q1   a
2    2   q1   b
3    1   q2   b

我想要生成的是一个表格,其中显示了对每个问题的回答,其中列是问题 ID,每一行代表一个主题。在上面的示例中,表格如下所示:

  q1 q2  q3
1  a  b  NA
2  b  NA NA

生成这样一个表的最佳方法是什么?

4

2 回答 2

5

假设您的问题 data.frame 是DQ并且您的答案DT

您需要确保q_id答案中的列具有所有可用级别

DT$q_id <- factor(as.character(DT$q_id), levels = levels(DQ$q_id))

然后您可以根据需要使用reshape2and dcastwithdrop = FALSE进行投射

library(reshape2)
dcast(DT, s_id~q_id, value.var = 'res', drop = FALSE)
  s_id q1   q2   q3
1    1  a    b <NA>
2    2  b <NA> <NA>
于 2013-02-08T01:36:32.813 回答
3
> dat <- read.table(text="  s_id q_id res
+ 1    1   q1   a
+ 2    2   q1   b
+ 3    1   q2   b", header =TRUE, stringsAsFactors=FALSE)

# Create a dummy entry for each question:

> dat<- rbind(dat, data.frame(s_id=1,q_id=qdat$q_id, res= NA))
> dat
  s_id q_id  res
1    1   q1    a
2    2   q1    b
3    1   q2    b
4    1   q1 <NA>
5    1   q2 <NA>
6    1   q3 <NA>
> reshape(dat,  timevar="q_id", idvar="s_id", direction ="wide")
  s_id res.q1 res.q2 res.q3
1    1      a      b   <NA>
2    2      b   <NA>   <NA>
于 2013-02-08T01:40:38.287 回答