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

如何用R筛选多条件数据:找出2010-2021年从未获补贴的企业ID

筛选2010-2021年间从未获得补贴的企业ID

你用filter(firms$sub==0)只能提取单年份补贴为0的行,但要找出所有目标年份补贴全为0的企业,需要按企业分组后检查组内所有记录的sub值,以下是两种可行方法:

方法1:使用dplyr(tidyverse风格)

先限定时间范围,再按企业ID分组,筛选出组内所有sub均为0的企业,最后去重得到唯一ID:

library(dplyr)

# 处理并提取目标企业ID
zero_sub_firms <- firms %>%
  # 仅保留2010-2021年的数据
  filter(year >= 2010 & year <= 2021) %>%
  # 按企业ID分组
  group_by(firm_id) %>%
  # 筛选出组内所有sub都为0的企业
  filter(all(sub == 0)) %>%
  # 去重得到唯一的企业ID列表
  distinct(firm_id)

# 查看结果
print(zero_sub_firms)
  • all(sub == 0):检查当前企业的所有年份记录中,sub是否全部为0,只有满足条件的企业组会被保留
  • distinct(firm_id):避免同一企业多次出现在结果中

方法2:使用Base R

如果不习惯tidyverse,也可以用基础R实现:

# 第一步:筛选2010-2021年的数据
firms_target <- firms[firms$year >= 2010 & firms$year <= 2021, ]

# 第二步:按企业ID分组,计算每个企业的补贴最大值(全为0则最大值为0)
sub_max_per_firm <- tapply(firms_target$sub, firms_target$firm_id, max)

# 第三步:提取最大值为0的企业ID
zero_sub_firms <- names(sub_max_per_firm[sub_max_per_firm == 0])

# 查看结果
print(zero_sub_firms)

思路:如果某企业所有年份补贴都是0,那么它的补贴最大值必然为0;反之,只要有一年补贴不为0,最大值就会大于0,以此筛选目标企业。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:10:16