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

R语言实现:按Time变量筛选30分钟区间首行,删除符合条件的后续行

R 实现30分钟区间仅保留首行的筛选方法

前置注意

  • 首先确保你的数据框已经按Time列升序排序,若未排序先执行排序操作:
df <- df[order(df$Time), ]

方法1:基础R循环实现(逻辑直观,中小数据量适用)

逻辑为从第一行开始记录上一次保留的时间戳,逐行判断是否满足间隔大于等于1800秒,满足就保留并更新上一次保留的时间戳。

# 初始化保留行的索引,第一行默认保留
keep_idx <- 1
last_keep_time <- df$Time[1]

# 逐行遍历判断
for (i in 2:nrow(df)) {
  current_time <- df$Time[i]
  if (current_time > last_keep_time + 1800) {
    keep_idx <- c(keep_idx, i)
    last_keep_time <- current_time
  }
}

# 提取结果
result_df <- df[keep_idx, ]

方法2:tidyverse 风格实现(适合tidy生态用户)

用purrr::accumulate实现累积判断,代码更简洁:

library(dplyr)
library(purrr)

result_df <- df %>%
  arrange(Time) %>% # 先保证时间升序
  mutate(
    # 累积计算每个分组的起始时间标记
    group_mark = accumulate(Time, ~ifelse(.y > .x + 1800, .y, .x))
  ) %>%
  # 每个分组只保留第一行
  distinct(group_mark, .keep_all = TRUE) %>%
  select(-group_mark) # 删除辅助列

示例数据测试结果

你给出的示例数据中6行的Time最大间隔仅为300秒,远小于1800秒的阈值,所以运行后仅会保留第一行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:51:02