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

R语言处理测试结果:关联失败时间至后续通过事件并合并

解决方案

用dplyr搭配lubridate就能搞定这个需求,核心逻辑是按分组排序后,为每个失败事件匹配后续首个通过测试的时间,最后只保留失败事件记录:

操作步骤

  • 先按项目、分组和测试时间排序,保证时间顺序正确
  • 分组后为每个失败事件查找晚于当前时间的首个通过测试时间,作为fixed_dt
  • 筛选出所有失败事件,新增failed_dt列(就是失败事件自身的测试时间)
  • 调整列顺序,匹配你要的最终格式

完整代码

# 加载依赖包
library(dplyr)
library(lubridate)

# 处理数据
result <- test_data %>%
  # 按分组和时间排序
  arrange(project_name, grp_res, test_dt) %>%
  group_by(project_name, grp_res) %>%
  # 为每个失败事件匹配后续首个通过的时间
  mutate(
    fixed_dt = map_dbl(test_dt, ~{
      # 提取当前时间之后的所有通过测试时间
      pass_times <- test_dt[test_dt > .x & !test_fail]
      # 有符合条件的就取最早的,没有则返回NA
      if(length(pass_times) > 0) min(pass_times) else NA_real_
    }) %>% as_datetime()
  ) %>%
  ungroup() %>%
  # 只保留失败事件
  filter(test_fail) %>%
  # 新增失败时间列
  mutate(failed_dt = test_dt) %>%
  # 调整列顺序匹配目标格式
  select(project_name, grp_res, test_fail, test_dt, failed_dt, fixed_dt, test_status)

# 查看结果
print(result)

代码说明

  • arrange():确保每组内的测试记录严格按时间先后排列,这是匹配后续事件的前提
  • map_dbl()的自定义逻辑:针对每个失败事件的时间,在同组里筛选出所有晚于它的通过测试,取最早的那个作为修复时间
  • as_datetime():把数值化的时间转回datetime类型,避免格式丢失
  • 最后筛选失败事件并调整列顺序,得到的结果和你提供的final_data完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:44:55