根据其他变量的变化值来计算响应

时间:2018-07-23 19:01:22

标签: r

我有一个数据框架,其中包含一项调查的数据,在该调查中,受访者多次被问到相同的问题:

DF <- data.frame(respondent = factor(c("R1", "R1", "R1", "R2", "R2","R2", "R3", "R3", "R3", "R4", "R4",  "R4", "R5", "R5")), 
                  round = factor(c(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2)),
                  choice = factor(c("Option 1", "Option 1", "Option 1", "Option 1", "Option 1", "Option 2", "Option 2", "Option 1", "Option 2", "Option 2", "Option 1", "Option 2", "Option 2", "Option 2")))

我想计算在第一轮调查中选择每个选项的受访者的比例,以及在两轮调查之间改变其回答的人数。

我可以通过tapply(DF$choice, DF$round, summary)实现第一个目标,它告诉我每一轮中有多少受访者选择了每个答复。既然我只对第一轮感兴趣,是否有办法在没有其他轮次不必要数据的情况下做到这一点?

更重要的是,我如何获得更改了响应(以及从哪个响应到哪个响应)的受访者人数?

1 个答案:

答案 0 :(得分:0)

您可以将数据从其当前的“长”格式重塑为“宽”格式。方法如下:

library(reshape2)
DF.wide <- reshape(DF, direction='wide', idvar='respondent', timevar='round')
DF.wide$change.1.to.2 <- DF.wide$choice.1 == DF.wide$choice.2
DF.wide$change.2.to.3 <- DF.wide$choice.2 == DF.wide$choice.3
DF.wide$change.1.to.3 <- DF.wide$choice.1 == DF.wide$choice.3

输出将如下所示:

   respondent choice.1 choice.2 choice.3 change.1.to.2 change.2.to.3 change.1.to.3
1          R1 Option 1 Option 1 Option 1          TRUE          TRUE          TRUE
4          R2 Option 1 Option 1 Option 2          TRUE         FALSE         FALSE
7          R3 Option 2 Option 1 Option 2         FALSE         FALSE          TRUE
10         R4 Option 2 Option 1 Option 2         FALSE         FALSE          TRUE
13         R5 Option 2 Option 2     <NA>          TRUE            NA            NA

然后您可以对此进行扩展以确定实际更改(例如从什么更改为什么)。