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

R语言tidyverse基于指定分组最小日期过滤另一分组行的实现

实现方法

你不需要用长宽表转换的逻辑,直接用dplyr的分组计算+过滤即可,效率很高也容易理解:

核心思路

  1. 按id分组,为每个ID计算出type=B的最小日期作为过滤阈值
  2. 仅删除type=A且日期晚于上述阈值的行,其余所有行全部保留

代码实现

library(dplyr)

# 示例数据
tbl <- tibble(id = c(rep(1,5), rep(2,5)),
              type = c("A","A","A","B","C","A","A","B","B","C"),
              dat = as.Date("2021-12-07") - c(3,0,1,2,0,3,6,2,4,3))

# 处理逻辑
result <- tbl %>%
  group_by(id) %>%
  # 计算每个id下type为B的最小日期作为阈值
  mutate(b_min_date = min(dat[type == "B"], na.rm = TRUE)) %>%
  # 过滤规则:排除type为A且日期大于阈值的行
  filter(!(type == "A" & dat > b_min_date)) %>%
  ungroup() %>%
  # 删除临时计算的阈值列
  select(-b_min_date)

运行上述代码得到的结果和你给出的预期输出完全一致。如果需要适配其他分组的过滤需求,只需要修改代码里对应的type取值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:01