我有一个数据框架,其中包含一项调查的数据,在该调查中,受访者多次被问到相同的问题:
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)
实现第一个目标,它告诉我每一轮中有多少受访者选择了每个答复。既然我只对第一轮感兴趣,是否有办法在没有其他轮次不必要数据的情况下做到这一点?
更重要的是,我如何获得更改了响应(以及从哪个响应到哪个响应)的受访者人数?
答案 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
然后您可以对此进行扩展以确定实际更改(例如从什么更改为什么)。