使用group_by()%>%summarise()分组统计时的动物总数显示问题
解决方法
问题出在animal_total的计算逻辑上——你直接对所有家庭的动物总数求和,没有区分当前分组的饲养状态。只需在求和前筛选出与当前分组匹配的家庭数据即可:
library(tidyverse) # 创建个人层面数据 person_level <- tibble::tribble( ~household_id, ~person_id, ~age, ~diarrhea, ~animal, ~animal_total, 1, 1, 2, 1, 1, 5, 1, 2, 3, 0, 1, 5, 1, 3, 65, NA, 1, 5, 1, 4, 66, NA, 1, 5, 2, 1, 2, 1, 0, 0, 2, 2, 4, 0, 0, 0, 2, 3, 8, NA, 0, 0, 2, 4, 55, NA, 0, 0 ) # 转换为家庭层面数据(去重) household_level <- person_level %>% distinct(household_id, .keep_all = TRUE) # 生成修正后的汇总表 person_level %>% group_by(animal) %>% summarise( n = n(), # 关键修改:筛选当前分组对应的家庭再求和 animal_total = household_level %>% filter(animal == .data$animal) %>% pull(animal_total) %>% sum(), n_under5 = sum(age <= 5, na.rm = TRUE), num_diarrhea = sum(diarrhea, na.rm = TRUE), percent_diarrhea = round((num_diarrhea / n_under5), 4)*100 ) %>% arrange(desc(animal))
效果说明
- 养宠组(
animal=1):animal_total显示对应家庭的动物总数5 - 无宠组(
animal=0):animal_total显示0
内容的提问来源于stack exchange,提问作者S.S.
相关产品推荐
相关产品推荐

