如何按两组计算各选项的受试者选择占比?
问题分析:计算分组内各Item的受试者占比
初始数据
你构建的初始DataFrame代码如下:
subject <- c(rep("A",3), rep("B",3), rep("C",3), rep("D",3)) item <- c(1:3, 1,4,5,1,2,6,3,4,7) group <- c(rep("pre",6), rep("post",6)) initialdf <- data.frame(subject,item,group)
目标结果
你希望得到每个group(pre/post)中,选择各item的受试者占比,目标DataFrame代码如下:
item2 <- c(rep(1:7,2)) group2 <- c(rep("pre",7),rep("post",7)) percent <- c(100,rep(50,4),rep(0,2),rep(50,4),0,rep(50,2)) finaldf <- data.frame(item2,group2,percent)
尝试的分组方式
你尝试了以下8种分组组合:
group_by(subject)%>%group_by(group)%>%group_by(subject,group)%>%group_by(group,subject)%>%group_by(group,item)%>%group_by(item,group)%>%group_by(item,subject)%>%group_by(subject,item)%>%
尝试的计算逻辑
每次调整分组后,你使用的计算代码(以group_by(subject)为例):
initialdf%>% group_by(subject)%>% summarise(n = n()) %>% mutate(freq = n / sum(n))%>% mutate(Percent = freq*100)
你的操作存在的核心问题
1. 分组逻辑偏离目标
你需要的是按group分组,统计每个group下各item对应的独立受试者数量,再除以该group的总受试者数,但大部分分组都没抓住这个核心:
- 如
group_by(subject)是按受试者分组,统计的是单个受试者的条目数占比,和目标需求完全无关; group_by(group,item)虽然方向正确,但后续统计逻辑没匹配上。
2. 统计逻辑错误
你的summarise(n = n())统计的是分组内的条目总数,而非选择该item的独立受试者数。比如同一个受试者在pre组选了item1,你的代码会把该受试者的多条目重复计算,但实际上每个受试者在一个组内只需要统计一次。
3. 缺失补全空item的步骤
目标结果包含了所有1-7的item(包括某个组里无人选择的item,比如pre组的item6、7),但你的代码不会自动补全这些缺失的item,导致结果里没有这些占比为0的行。
内容的提问来源于stack exchange,提问作者Juliana Gómez
相关产品推荐
相关产品推荐

