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

如何在dplyr中结合多列区间条件过滤并计算匹配行数

解决方案

我们可以通过purrr::pmap_dbl同时处理多列过滤条件,它能一次性传递df2中的A_min、A_max、B_min、B_max四个参数,针对每个条件组合统计df1中符合要求的行数。

代码实现

library(dplyr)
library(purrr)

df1<-data.frame(A=c(1:10),
                B=c(3:12))
df2<-data.frame(A_min=c(2,3),
                A_max=c(3,3),
                B_min=c(1,2),
                B_max=c(2,2))

# 为df2添加匹配行数列
df2$match_count <- pmap_dbl(df2, function(A_min, A_max, B_min, B_max) {
  df1 %>%
    filter(A >= A_min, A <= A_max, B >= B_min, B <= B_max) %>%
    nrow()
})

# 查看结果
df2

结果说明

运行后df2会新增match_count列,对应每个条件组合在df1中的匹配行数:

  • 第一行条件(A∈[2,3]、B∈[1,2]):df1的B列从3开始,无符合B区间的行,所以match_count为0
  • 第二行条件(A∈[3,3]、B∈[2,2]):同样df1中B最小值为3,无匹配行,match_count也为0

如果你的实际数据存在符合条件的记录,这个方法会准确统计对应数量。

替代方案(rowwise语法)

若更习惯dplyr的逐行处理逻辑,也可以用以下写法:

df2 %>%
  rowwise() %>%
  mutate(match_count = nrow(filter(df1, A >= A_min, A <= A_max, B >= B_min, B <= B_max))) %>%
  ungroup()

逻辑和pmap_dbl完全一致,只是通过rowwise()标记逐行处理df2的条件组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:24:22