我有一个代表日志消息的tibble。它(以及其他)有两列:
我现在要做的是找到每个日志文件的开始时间,结束时间和持续时间(由FileCreationDateTime标识)。我认为(或者认为)可以使用以下代码完成:
file_durations <-
logMessages%>%
group_by(FileCreationDateTime) %>%
summarise(start = min(EventDateTime),
end = max(EventDateTime),
duration = dseconds(end - start))
代码本身似乎没有错误地运行,但我既不能打印结果也不能访问它(至少不是列&#34;持续时间&#34;)因为它返回错误
Error in sprintf("%ds (~%s %ss)", x, x2, unit, "s)") :
invalid format '%d'; use format %f, %e, %g or %a for numeric objects
调查,我发现错误似乎取决于日期时间的确切值。我已经把MWE和两个元组放在了一起。两个元素仅在一个值上有所不同。一个工作,而另一个没有。我不知道什么可能导致错误。有人可以开导我吗?
人类可读的语言:
> 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))
我在Windows 10上使用R 3.4.0 64bit,lubridate_1.6.0和dplyr_0.5.0。
感谢您的帮助!
答案 0 :(得分:1)
我终于找到了问题。 dplyr
与lubridate::dseconds
没有任何关系。正如已经报道的那样(例如this issue),它在非整数输入上失败&gt;这显然也是我的问题。