You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:32:47