【发布时间】:2020-08-27 03:47:36
【问题描述】:
我想计算从一开始的累积时间差。我编写了一个粗略的解决方案,我并不特别喜欢。有人有可以在 dplyr 管道中使用的更优雅和可靠的解决方案吗?愿望结果应如 diffCum 列中所示。
require(dplyr)
d = data.frame(n = 1:3, t = lubridate::ymd_hms("2020-03-30 08:15:39","2020-03-30 10:15:39","2020-03-30 14:15:39")) %>%
mutate(diffMin = difftime(t, lag(t,1), unit = "mins")) %>%
mutate(diffMin = ifelse(is.na(diffMin), 0, diffMin)) %>% # error prone as it would capture other NAs
mutate(diffCum = cumsum(diffMin)) # does not work with difftime class
【问题讨论】:
-
第一次使用
lag(t, 1, default = t[1])可以去掉第二个mutate。之后,您可以使用diffCum = cumsum(as.numeric(difftime(t, lag(t, 1, default = t[1]), unit = "mins")))使其成为单一变异(如果您不需要diffMin)。 -
(顺便说一句:你应该几乎总是使用
library,而不是require。当包不可用时,后者永远不会停止跟踪代码,这几乎不是预期的。参考:@987654321 @) -
感谢 r2evans。基本上你和约翰的答案或多或少相似。也会获得“接受”。