首页 > 解决方案 > 在数据帧 R 中搜索时间戳异常

问题描述

我正在处理来自柏林的一些 GTFS 数据,我现在在这里碰壁。

有一个包含 500 万行的柏林所有 Busstops 的 stop_times.txt 文件。两列(Arrival_time 和 Departure_time)包含异常,例如

Arrival_time : 112:30:0 而不是常规格式 11:20:30。

我真的不知道如何提取那些特定的行并将它们从数据集中删除。我想不出一种能够检测到它的算法。我尝试使用字符串的长度(应该是 8 00:00:00 = 8 个字符),但错误的长度也是 8 个。

您知道一种简单的方法来确保格式始终为 xx:xx:xx 并删除所有其他格式吗?

谢谢...

编辑 :

所以,现在在尝试了下面建议的解决方案之后,它没有工作,因为它只会告诉我有多少行是恶意的,而不是在哪里,而不是我如何删除这些。

我的想法基本上是现在:

  1. 查找与此确切格式不对应的每个时间戳:

'00:00:00',长度必须为 '8' 和 2 位数字,由 ':' 分隔。有没有办法检测这种模式中的异常然后删除它们?我真的不知道如何解决这个问题了。

谢谢

标签: rdataframetimestamplubridate

解决方案


lubridate是如此有用的软件包,我不记得没有它我是怎么做的。

require(lubridate)
times <- c("112:30:0", "11:20:30")
datetimes <- paste("01.01.2018", times)
parsed.datetimes <- lubridate::dmy_hms(datetimes)
#[1] NA                        "2018-01-01 11:20:30 UTC"
#Warning message:
# 1 failed to parse. 

当格式解析失败时,这个函数会自动告诉你,唯一的事情是,它以日期时间格式作为输入,而不是仅仅时间,但你可以很容易地解决这个问题,如图所示。

为了确切知道哪些解析失败,您可以申请:

failed.list <- which(is.na(parsed.datetimes))

推荐阅读