在使用datetimes和lubridate :: dseconds时dplyr :: summarize中的错误
问题描述:
我有一个代表日志消息的tibble。它具有(等等)两列:在使用datetimes和lubridate :: dseconds时dplyr :: summarize中的错误
- FileCreationDateTime识别从该消息始发并且因此旨在作为分组变量的日志文件。 (把它看成是“文件名”)
- EventDateTime是其中一些事件happend
我现在想要做的是找到的开始时间,结束时间和每个日志文件的持续时间(由FileCreationDateTime标识)。我认为(或思想),这可以用下面的代码来完成:
file_durations <-
logMessages%>%
group_by(FileCreationDateTime) %>%
summarise(start = min(EventDateTime),
end = max(EventDateTime),
duration = dseconds(end - start))
本身似乎运行没有错误的代码,我可以但是没有打印结果,也没有访问它(至少不是列“持续时间”)因为它返回错误
Error in sprintf("%ds (~%s %ss)", x, x2, unit, "s)") :
invalid format '%d'; use format %f, %e, %g or %a for numeric objects
调查,我发现错误似乎取决于日期时间的确切值。我用两个骰子组装了一个MWE。两个骰子只有一个值不同。一个工作,而另一个不工作。我不知道什么可能会导致错误。有人能够启发我吗?
人类可读tibbles:
> working
# A tibble: 2 × 2
EventDateTime FileCreationDateTime
<dttm> <dttm>
1 2016-11-24 16:16:44.986 2016-11-24 16:16:46
2 2016-11-24 16:17:43.282 2016-11-24 16:16:46
> broken
# A tibble: 2 × 2
EventDateTime FileCreationDateTime
<dttm> <dttm>
1 2016-11-24 16:16:44.986 2016-11-24 16:16:46
2 2016-11-24 16:18:31.971 2016-11-24 16:16:46
完整MWE:
library(tidyverse)
library(lubridate)
options(digits.secs = 6, digits = 6)
working <- structure(list(EventDateTime = structure(c(1480004204.987, 1480004263.283),
class = c("POSIXct", "POSIXt"),
tzone = "UTC"),
FileCreationDateTime = structure(c(1480000606, 1480000606),
class = c("POSIXct", "POSIXt"),
tzone = "Europe/Vienna")),
.Names = c("EventDateTime", "FileCreationDateTime"),
row.names = c(NA, -2L),
class = c("tbl_df", "tbl", "data.frame"))
working %>%
group_by(FileCreationDateTime) %>%
summarise(start = min(EventDateTime),
end = max(EventDateTime),
duration = dseconds(end - start))
broken <- structure(list(EventDateTime = structure(c(1480004204.987, 1480004311.972),
class = c("POSIXct", "POSIXt"),
tzone = "UTC"),
FileCreationDateTime = structure(c(1480000606, 1480000606),
class = c("POSIXct", "POSIXt"),
tzone = "Europe/Vienna")),
.Names = c("EventDateTime", "FileCreationDateTime"),
row.names = c(NA, -2L),
class = c("tbl_df", "tbl", "data.frame"))
broken %>%
group_by(FileCreationDateTime) %>%
summarise(start = min(EventDateTime),
end = max(EventDateTime),
duration = dseconds(end - start))
我,使用R 3.4.0 64位,lubridate_1.6.0和dplyr_0.5.0在Windows 10
感谢您的帮助!
有人可以重现吗? – AEF