R读取XLSX天气时间序列时不同时间点被误判为重复
问题排查与解决方法
- 首先明确
duplicated()函数的核心逻辑:该函数返回的是「当前位置的元素是否已经在序列的前面位置出现过」,输出的两个重复值实际对应两组独立的重复时间对:43253.50(对应2018-06-02 12:00 UTC)和43253.54(对应2018-06-02 13:00 UTC)各出现了至少2次,并非两个相差1小时的时间被互相判定为重复,与时区、夏令时无关。 - 优先排查原始Excel源文件:直接在Excel中筛选对应两个时间点的所有行,绝大多数此类问题是源数据本身存在重复条目,常见诱因包括数据导出时的拼接错误、气象站点重复上报数据。
- 若源文件无重复,排查浮点数精度问题:单独提取数值无法复现问题,是因为R默认浮点数打印仅显示前几位有效数字,肉眼可见的打印值和底层存储的实际值可能存在差异,可用以下代码校验:
# 调高浮点数打印精度,显示底层真实存储值 options(digits = 20) # 输出所有和重复值相等的条目,确认是否确实完全相等 df$Time[df$Time %in% df$Time[duplicated(df$Time)]] # 校验相同名义值的数值差是否小于浮点精度阈值 diff(df$Time[df$Time == df$Time[duplicated(df$Time)[1]]]) < .Machine$double.eps
- 确认重复后的去重方案:如果确定为无效重复,可直接按时间列去重,保留第一次出现的条目即可:
# 基础R方法 df_unique <- df[!duplicated(df$Time), ] # dplyr方法(保留其他所有列) library(dplyr) df_unique <- df %>% distinct(Time, .keep_all = TRUE)
内容的提问来源于stack exchange,提问作者Texanum
相关产品推荐
相关产品推荐

