在数据帧R

时间:2018-09-25 14:21:55

标签: r dataframe timestamp lubridate

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

柏林的所有公交车站都有一个stop_times.txt文件,其中有500万行。 两列(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个数字,中间用“:”分隔。有没有一种方法可以检测此模式中的异常,然后将其删除?我真的不知道该如何解决这个问题。

谢谢

1 个答案:

答案 0 :(得分:0)

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. 

此功能将在格式解析失败时自动告诉您,唯一的是,它以datetime格式作为输入而不是时间,但是您可以轻松地解决显示的问题。

为了确切地知道哪些解析失败,您可以应用:

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