R语言:分组汇总后强制显示无数据分位数列并填充0
解决方法
问题出在你的AGE_LABOURFORCE_Q_CSDUID列没有包含所有分位数的水平(因为没有q1的病例,该列的取值里没有1),导致complete()无法识别需要补全这个缺失的分位数分组。你需要先把这个列转为带有全部预设水平的因子,再进行后续操作。
修正后的代码如下:
# 在管道内直接转换分位数列为带全水平的因子,不修改原数据框 count_age <- marg_data_1920 %>% mutate(AGE_LABOURFORCE_Q_CSDUID = factor( AGE_LABOURFORCE_Q_CSDUID, levels = 1:5 # 明确指定所有需要保留的分位数水平 )) %>% group_by(Age_Grp_15, AGE_LABOURFORCE_Q_CSDUID) %>% summarise(count = n(), .groups = "drop") %>% # 清除残留分组避免影响后续操作 complete(Age_Grp_15, AGE_LABOURFORCE_Q_CSDUID, fill = list(count = 0)) %>% spread(AGE_LABOURFORCE_Q_CSDUID, count, fill = 0) %>% rename(age = Age_Grp_15) # 统一列名(确保顺序对应分位数) colnames(count_age) <- c("age", "q_1", "q_2", "q_3", "q_4", "q_5")
关键说明
- 用
mutate()将分位数列转为因子并指定levels=1:5,强制R识别所有5个分位数为合法分组,哪怕原数据中没有对应值 summarise后添加.groups="drop",避免分组状态残留干扰complete()的补全逻辑- 无需使用
nesting(),直接指定两个分组变量即可让complete()生成所有年龄组×分位数的组合,缺失组合自动填充count=0
内容的提问来源于stack exchange,提问作者user25561433
相关产品推荐
相关产品推荐

