【发布时间】:2022-01-13 06:55:19
【问题描述】:
我有一个大数据集(作为一个数据表,超过 1 亿行)并希望计算两列之间的 difftime。如果是“%H%M%OS”,则为时间字符串格式,不带前导零.例如,数据
ID time0 time1
1 93005220 93005320
2 93551060 93553940
3 93717740 93717740
4 94840800 94840800
5 94959510 94959510
6 101030460 101127870
7 101425010 101425010
8 104728320 104728980
9 105704050 105705890
10 135109830 135402830
11 93005220 150001330
以第一行为例,我不能用difftime,strptime来计算"93005320"("09:30:05.320")和"93005220"("09:30:05.220")之间的difftime ),我必须将“93005220”更改为“093005.220”之类的格式,然后我尝试如下:
difftime(strptime("093005.220","%H%M%OS"),strptime("093005.320","%H%M%OS"))
但是如果这样做,对于超过 1 亿行来说太慢了。在 R 中有没有一种有效的方法来做到这一点?
【问题讨论】:
-
你有什么理由不只是减去时间吗?时间差似乎在毫秒范围内,所以你的结果无论如何都是一个数字,而不是时间戳。
-
@D.J,感谢您的评论。在实际数据中,时差可能超过3小时,但所有时间都是同一天。例如。 time0="93005220"("09:30:05.220"),time1="150001330"("15:00:01.330")。我将其作为最后一行添加到 eg.data。
-
@D.J.我确实需要数字的结果,我会尝试测试减法,谢谢。
-
lubridate 通常更快,如果你知道它是 hms 格式,请尝试
hms(col1) - hms(col2)。他们的实施可能会加快一点。 -
@Oliver
hms无法解析“93005220”格式。