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

如何在R中过滤含缺失观测的公交数据并删除后续指定记录

解决公交行程缺失站点后删除后续指定记录的R实现

以下是基于tidyverse的简洁实现方案,针对需求——当行程中出现缺失站点时,删除该缺失站点后的指定数量(可灵活调整)记录:

模拟数据

首先生成符合场景的模拟数据,包含2个独立行程(用trip_id区分),存在站点缺失:

library(tidyverse)

set.seed(123)
df <- tibble(
  trip_id = rep(c(1, 2), each = 15),
  stop = c(5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,  # 行程1缺失站点9、18
           5,6,8,9,10,11,12,13,15,16,17,18,19,20,21)   # 行程2缺失站点7
)

核心实现代码

# 定义缺失站点后需要删除的后续记录数量(可灵活调整)
n_delete <- 3

processed_df <- df %>%
  group_by(trip_id) %>%
  arrange(stop) %>%
  mutate(
    # 生成该路线的理想站点序列(5至20)
    ideal_stops = list(5:20),
    # 找出当前行程缺失的站点
    missing_stops = list(setdiff(ideal_stops[[1]], stop)),
    # 计算每个缺失站点后需要删除的站点范围:从缺失站+1开始,连续n_delete个(不超过20)
    to_remove = list(unlist(map(missing_stops[[1]], ~ seq(.x + 1, min(.x + n_delete, 20)))))
  ) %>%
  # 保留不在删除列表中的记录,且仅保留理想序列内的站点
  filter(!stop %in% to_remove[[1]] & stop %in% ideal_stops[[1]]) %>%
  # 清理辅助计算列
  select(-ideal_stops, -missing_stops, -to_remove) %>%
  ungroup()

# 查看处理结果
print(processed_df)

代码逻辑说明

  1. 分组处理:按trip_id分组,确保每个行程的缺失站点判断独立进行
  2. 识别缺失站点:对比理想站点序列(5-20)和当前行程实际存在的站点,找出缺失值
  3. 标记删除范围:对每个缺失站点,计算后续需要删除的连续n_delete个站点(上限为20,避免超出路线站点范围)
  4. 过滤记录:保留不在删除范围内的站点,同时剔除理想序列外的无效站点(比如示例中的21)

结果验证

  • 行程1中缺失9和18,会删除10-12、19-20,最终保留站点:5,6,7,8,13,14,15,16,17
  • 行程2中缺失7,会删除8-10,最终保留站点:5,6,11,12,13,15,16,17,18,19,20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:45:05