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

如何按家庭非零薪资数量筛选R语言DataFrame为单/双收入者数据集

按家庭分组筛选单/双收入者数据集的正确实现方法

原始数据集

首先给出用于测试的df数据框:

df <- data.frame(
  "id" = c(1,1,1,2,2,2,3,3,3,4,4,4,5,5),
  "relation" = c(1,2,3,1,2,3,1,2,3,1,2,3,1,2), 
  "salary" = c(20,10,0,30,0,0,10,0,0,40,45,42,15,0)
)

需求说明

按id(家庭)分组,将数据集拆分为两类:

  • 单收入者家庭:组内仅1个成员薪资非零
  • 双收入者家庭:组内至少2个成员薪资非零

原代码问题分析

你写的代码存在两个核心错误:

  1. 分组依据错误:数据框中没有address字段,应该按id分组
  2. 筛选逻辑错误:all(salary >=2)或all(salary ==1)的逻辑完全不符合需求——你需要统计每组内非零薪资的成员数量,而非判断所有成员薪资是否满足某个数值条件

正确实现代码

使用dplyr包的分组+筛选逻辑,直接在分组后计算每组的非零薪资数来筛选:

筛选双收入者家庭

library(dplyr)

two_earner <- df %>%
  group_by(id) %>%
  filter(sum(salary != 0) >= 2) %>%
  ungroup() # 取消分组,得到常规数据框

筛选单收入者家庭

one_earner <- df %>%
  group_by(id) %>%
  filter(sum(salary != 0) == 1) %>%
  ungroup()

验证输出

运行上述代码后,输出结果与预期一致:

  • one_earner结果:
# A tibble: 8 × 3
     id relation salary
  <dbl>    <dbl>  <dbl>
1     2        1     30
2     2        2      0
3     2        3      0
4     3        1     10
5     3        2      0
6     3        3      0
7     5        1     15
8     5        2      0
  • two_earner结果:
# A tibble: 6 × 3
     id relation salary
  <dbl>    <dbl>  <dbl>
1     1        1     20
2     1        2     10
3     1        3      0
4     4        1     40
5     4        2     45
6     4        3     42

内容的提问来源于stack exchange,提问作者mehmo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:42:21