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

R语言duplicated()函数错误输出非重复条目问题排查求解

异常原因

  • 对比范围理解错误:你是先对完整的all_trip表执行duplicated()全表扫描,再对筛选出的重复结果切片查看。被标记的C24A条目的重复项存在于全表的其他位置,和你截取的1365-1370区间内的D81条目无关,你误以为二者被判定为重复,属于对比范围选错了。而且你输出的重复结果里没有D81条目,本身也说明二者没有被判定为重复。
  • 判定字段不符合预期:你当前传入duplicated()的判定字段仅包含车型、起止站点、经纬度、用户类型共8个字段,没有加入started_at、ended_at两个骑行时间字段,只要8个字段相同,不管骑行时间是否一致都会被判定为重复,是不符合你预期逻辑的核心原因。
  • duplicated()默认规则限制:该函数默认仅标记重复组中非首次出现的条目,不会返回重复组里的第一条记录,所以你只能看到C24A这条重复项,看不到和它匹配的更早出现的另一条重复记录。

解决方法

调整重复判定规则(最常用)

如果你的业务逻辑是「起止时间+其他属性都相同才算重复」,把两个时间字段加入判定列表即可:

# 定义重复判定的全部字段
dup_cols <- c("started_at", "ended_at", "rideable_type", "start_station_name", 
              "end_station_name", "start_lat", "start_lng", "end_lat", "end_lng", "member_casual")
# 筛选重复条目(默认返回非首次出现的重复项)
same_times_and_place <- all_trip[duplicated(all_trip[dup_cols]), ]

提取重复组的全部条目

如果需要把每个重复组里所有条目都提取出来(含首次出现的),使用双向判定:

dup_flag <- duplicated(all_trip[dup_cols]) | duplicated(all_trip[dup_cols], fromLast = TRUE)
all_dup_rows <- all_trip[dup_flag, ]

避免经纬度浮点精度干扰

经纬度为浮点型数值,存储时可能存在微小精度误差导致本应重复的条目没被识别,可以先保留固定小数位(6位对应米级精度,满足骑行场景需求)再判定:

library(dplyr)
all_trip <- all_trip %>%
  mutate(across(c(start_lat, start_lng, end_lat, end_lng), ~round(.x, 6)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:57:04