如何过滤数据框移除k_hidp组收入占比总和不等于100的观测
家庭收入占比数据过滤实现方案
你需要按家庭标识分组筛选,仅保留组内收入贡献占比总和恰好为100%的家庭全部观测,以下是可直接运行的实现代码:
方法1:dplyr实现(推荐,语法简洁易读)
加载dplyr包后按家庭ID分组,计算每组占比总和后过滤即可,你提到的编号为68632420、占比总和仅83%的家庭会被完整剔除:
library(dplyr) test_11_clean <- test_11 %>% group_by(k_hidp) %>% # 若需排除存在占比缺失的家庭,可删除下面代码里的na.rm = TRUE参数 filter(sum(percentage_income_rounded, na.rm = TRUE) == 100) %>% ungroup()
方法2:基础R实现(无需安装第三方包)
如果不想加载额外拓展包,用基础R的ave函数可以实现完全一致的效果:
# 按家庭分组计算每组的占比总和 family_pct_sum <- ave( x = test_11$percentage_income_rounded, by = test_11$k_hidp, FUN = function(x) sum(x, na.rm = TRUE) ) # 保留总和为100的观测 test_11_clean <- test_11[family_pct_sum == 100, ]
过滤结果校验
过滤完成后可运行以下代码检查结果,确认所有保留家庭的占比总和均为100%:
# 校验结果,正常运行后只会返回100这一个值 test_11_clean %>% group_by(k_hidp) %>% summarise(total_percent = sum(percentage_income_rounded, na.rm = TRUE)) %>% pull(total_percent) %>% unique()
内容的提问来源于stack exchange,提问作者Maryam
相关产品推荐
相关产品推荐

