r - 在数据帧 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 并删除所有其他格式吗?
谢谢...
编辑 :
所以,现在在尝试了下面建议的解决方案之后,它没有工作,因为它只会告诉我有多少行是恶意的,而不是在哪里,而不是我如何删除这些。
我的想法基本上是现在:
- 查找与此确切格式不对应的每个时间戳:
'00:00:00',长度必须为 '8' 和 2 位数字,由 ':' 分隔。有没有办法检测这种模式中的异常然后删除它们?我真的不知道如何解决这个问题了。
谢谢
解决方案
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))
推荐阅读
- centos - 如何在 ActiveMQ 集群中持久化数据控制台 [Openshift]
- oop - 将数据结构逻辑与其图形表示分离的正确方法是什么?
- php - 数据库错误:无法迁移到数据库(Laravel)
- php - 在标准贝宝方法中以动态金额定期支付宝付款
- python - Django:我如何将用户输入值从 models.py 传递到其他文件(例如 entity_exctraction.py)
- c# - Azure Devops 上的 Nuget 还原失败,并显示消息“无法加载源的服务索引”
- ios - 主机名在特定网络上变空
- netty - Spring:单线程消费者
- c - C语言~数据文件使用delete函数修改文本文件内容(File IO)
- python - 矩阵向量运算的 Python 向量化