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

R语言DataFrame处理:根据前后行骑行站点匹配删除当前行

R实现DataFrame按相邻行条件过滤的方案

核心逻辑

我们只需要判断每行的end_station_name是否和下一行的start_station_name相等,保留不相等的行即可,最后一行无下一行默认保留。

方法1:dplyr实现(适合tidyverse技术栈,可读性高)

测试数据构造

df <- data.frame(
  ride = 1:5,
  start_station_name = c("A", "B", "C", "M", "K"),
  end_station_name = c("B", "C", "D", "N", "L")
)

过滤代码

library(dplyr)
df_result <- df %>%
  filter(end_station_name != lead(start_station_name, default = ""))

lead()函数会提取当前行的下一行对应列的值,default参数设置最后一行的下一行默认值为空字符串,保证最后一行始终保留。

方法2:data.table实现(适合超大型数据集,性能最优)

library(data.table)
setDT(df) # 转换为data.table格式
df_result <- df[end_station_name != shift(start_station_name, type = "lead", fill = "")]

方法3:基础R实现(无需加载第三方包)

# 生成保留行的逻辑向量,最后一位默认设为TRUE
keep_flag <- c(df$end_station_name[-nrow(df)] != df$start_station_name[-1], TRUE)
df_result <- df[keep_flag, ]

注意事项

如果数据包含多个用户的骑行记录,需要先按用户ID、骑行时间排序后分组再执行过滤,避免跨用户的相邻记录误判,示例(dplyr版本):

df_result <- df %>%
  arrange(user_id, ride_time) %>%
  group_by(user_id) %>%
  filter(end_station_name != lead(start_station_name, default = "")) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:15:08