R语言:计算符合条件的家庭户数统计问题求助
问题修正与解决方案
先看你代码里的几个问题:
- 分组列名写错:原数据框里的年份列是
Year,你写了years,大小写不匹配 ifelse语法错误:括号位置错误,应该把条件和结果都放在ifelse的括号内- 重复统计问题:每个家庭ID对应多行数据,直接sum会把同一个家庭重复计算,得先按ID去重再统计
下面是修正后的完整代码,能正确输出你需要的统计指标:
library(dplyr) # 示例数据集 df <- data.frame( Year = rep(2022:2023, times = c(20,25)), ID = rep(1:17, times = c(10, 2, 6, 3, 4, 3, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), Name = paste("name", 1:45), Age = 21:65, Coverage = rep("Yes", 45) ) # 计算每个家庭的规模,移除冗余的hh_count列 df <- df %>% group_by(ID) %>% mutate(dup_ID = n()) %>% # dup_ID即为对应家庭的成员数量 ungroup() # 按年份统计指标,先去重避免重复计算同一家庭 table_year <- df %>% distinct(ID, Year, dup_ID) %>% # 每个家庭仅保留一行数据 group_by(Year) %>% summarise( Total_HH = n_distinct(ID), # 总户数 HH_with_members_3_5 = sum(dup_ID %in% 3:5), # 3-5人家庭户数 HH_with_members_other = sum(!(dup_ID %in% 3:5)) # 成员数<3或>5的家庭户数 ) # 查看统计结果 table_year
代码说明:
- 删除了无意义的
hh_count列,它对统计没有帮助 - 用
distinct(ID, Year, dup_ID)先完成家庭信息去重,确保每个家庭只被统计一次 - 修正了
group_by的列名错误,同时简化了计数逻辑(逻辑值在sum运算中会自动转换为1和0,无需额外用ifelse) - 简化了最后一列的命名,更直观清晰
运行后就能得到按年份分组的统计结果,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Roshan
相关产品推荐
相关产品推荐

