Поиск аномалий меток времени в кадре данных R - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю с некоторыми данными GTFS из Берлина, и сейчас я встаю на стену.

Для всех Busstops в Берлине существует файл stop_times.txt с 5 миллионами строк.Два столбца (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 голосов
/ 25 сентября 2018

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))
...