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

在R中使用另一数据框的列按组筛选并保留分组信息

按年份分组匹配ID筛选DataFrame

你需要在数十万行的大型DataFrame中,基于year分组,只保留df_all里和df_filter同年份下匹配的ID。之前用group_by(year)后直接ID %in% df_filter$ID的方法无效,因为没有关联年份维度,导致跨年份的ID也被错误保留。

示例数据

df_filter <- data.frame(year = c(20,20,20,21,21,21), ID = seq(1:6))
df_all <- data.frame(year = c(20,20,20,21,21,21), ID = c(1,2,4,3,5,6))

现有方法的问题

直接用group_by(year)后判断ID %in% df_filter$ID,会把所有年份的ID混在一起判断,比如df_all中20年的ID4会被错误保留(因为它存在于df_filter的21年ID列表里),不符合按年份匹配的需求。

高效解决方案

推荐用半连接(semi_join)或者内连接(inner_join),这两种方法都能基于year和ID双列匹配,自动实现按组筛选,且处理大数据量效率很高:

方法1:使用dplyr的semi_join(推荐,仅保留匹配行,不新增列)

library(dplyr)

result <- df_all %>%
  semi_join(df_filter, by = c("year", "ID"))

方法2:使用内连接inner_join

library(dplyr)

result <- df_all %>%
  inner_join(df_filter, by = c("year", "ID")) %>%
  select(year, ID)  # 去掉重复列

输出结果

两种方法都会得到你想要的结果:

year ID
1   20  1
2   20  2
3   21  5
4   21  6

这两种方法不需要手动分组或枚举组合,底层优化过的算法能高效处理数十万行数据,完美解决跨DataFrame按组匹配筛选的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:25:07