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

如何在R中基于另一数据框的多变量过滤主数据框?

基于另一数据框的多变量筛选主数据框的方法

原始数据定义

主数据框:

df_root <- data.frame(
  id = c('1a','1a','2a','2a'),
  zone = c('II', 'I', 'I', 'II'),
  date = c(1,6,1,5)
)

备选数据框:

df_alternative <- data.frame(
  id = c('1a', '2a'),
  date = c(6,5)
)

解决方法

方法1:用dplyr的semi_join(推荐)

semi_join专门用来保留主数据框中与另一数据框匹配的行,不会添加额外列,完美适配这种多变量组合筛选的场景:

library(dplyr)

df_root_filtered <- df_root %>%
  semi_join(df_alternative, by = c("id", "date"))

方法2:用dplyr的inner_join

内连接会直接返回两个数据框中id和date同时匹配的行,结果和预期一致:

library(dplyr)

df_root_filtered <- inner_join(df_root, df_alternative, by = c("id", "date"))

方法3:Base R原生实现

如果不想加载第三方包,用merge函数做内连接即可:

df_root_filtered <- merge(df_root, df_alternative, by = c("id", "date"))

或者手动生成逻辑索引筛选:

# 逐行检查是否在备选数据框的id-date组合中
match_rows <- apply(df_root[, c("id", "date")], 1, function(x) {
  any(df_alternative$id == x[1] & df_alternative$date == x[2])
})

df_root_filtered <- df_root[match_rows, ]

最终结果

执行上述任意方法后,得到的df_root_filtered如下:

idzonedate
1aI6
2aII5

内容的提问来源于stack exchange,提问作者Ramiro Guzmán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:05:30