R语言如何筛选所有家庭成员年龄均大于20的家庭数据集
错误原因
你原来的SQL写法逻辑存在问题:GROUP BY household后直接使用having Members_age > 20,仅会校验分组后默认返回的第一条记录的年龄,不会判断该家庭下所有成员的年龄,因此输出结果不符合预期。
另外注意你描述的需求是「所有家庭成员年龄均大于20」,但给出的预期结果包含有20岁成员的家庭101,可根据实际需求调整判断条件为>(严格大于)或>=(大于等于)。
正确实现方案
sqldf 实现
利用MIN()聚合函数判断家庭最小年龄是否满足要求即可:
仅返回符合条件的家庭ID
sqldf("select household from data group by household having min(Members_age) >= 20")
输出结果:
household 1 100 2 101
返回符合条件家庭的所有成员记录
sqldf("select * from data where household in ( select household from data group by household having min(Members_age) >= 20 )")
dplyr 实现
同样按家庭分组后校验最小年龄:
仅返回符合条件的家庭ID
data %>% group_by(household) %>% filter(min(Members_age) >= 20) %>% distinct(household)
返回符合条件家庭的所有成员记录
data %>% group_by(household) %>% filter(min(Members_age) >= 20) %>% ungroup()
内容的提问来源于stack exchange,提问作者joy_1379
相关产品推荐
相关产品推荐

