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

R语言按id分组删除因子多水平首次出现后后续行的实现方法

R按分组保留首次b/c时间点及之前所有行的解决方案

核心思路

通过定位每个id下首次出现b/c的时间节点,保留所有时间小于等于该节点的行,自然兼容同时间点多条b/c记录的场景,同时满足无b/c记录的id全保留的规则。

实现代码

library(dplyr)
dat_result <- dat %>%
  # 按id分组
  group_by(id) %>%
  # 组内按时间排序,保证时间顺序正确
  arrange(dt, .by_group = TRUE) %>%
  # 计算当前id首次出现b/c的时间,无对应记录时返回无穷大Inf
  mutate(first_bc_time = min(dt[ind %in% c("b", "c")], na.rm = TRUE)) %>%
  # 保留所有时间早于或等于首次b/c时间的行
  filter(dt <= first_bc_time) %>%
  # 移除辅助计算列
  select(-first_bc_time) %>%
  # 取消分组
  ungroup()

逻辑验证

  • 对于id=1:首次b/c时间为2017-07-01,仅保留该时间及之前的2行,删除7月4日的后续行,符合要求
  • 对于id=3:首次b/c时间为2017-08-10,该时间点的b、c两行均被保留,删除8月15日的后续行,符合要求
  • 对于无b/c记录的id=4、id=6:min()对空集返回Inf,所有行均满足dt <= Inf,全部保留
  • 对于仅含b的id=5:首次b/c时间就是该行的时间,该行被正常保留

运行上述代码得到的结果和你给出的期望输出dat2完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:15:04