我有一个数据帧,其中包含两个时间戳,如下所示,我无法找到这两个时间戳的区别,但我想要的是第二行开始和第一行结束之间的区别。 我的数据是
time_df <- data.frame(start=as.POSIXct(c('2020-08-23 07:40:59','2020-08-23 08:22:28','2020-08-23 08:54:46','2020-08-23 09:23:17','2020-08-24 07:39:10','2020-08-24 08:13:06','2020-09-01 10:21:04','2020-09-02 06:14:54','2020-09-02 07:44:59'))
,end=as.POSIXct(c('2020-08-23 08:15:23','2020-08-23 08:46:41','2020-08-23 09:17:05','2020-08-23 09:51:20','2020-08-24 08:09:29','2020-08-24 08:37:45','2020-09-01 10:56:41','2020-09-02 06:43:02','2020-09-02 08:08:50')))
我正在尝试
time_df$duration <- as.numeric(difftime(time_df$end,time_df$start,units ="mins"))
但我想找到第二行开始和第一行结束之间的差异,将数据框保持在分钟以上,我想要 (8:22:28 - 8:15:23) 的差异
最佳答案
您可以删除 start
中的第一个值和 end
中的最后一个值,以便获得 start
的第二个值和第一个值的差值end
的值、start
的第三个值和 end
的第二个值,依此类推。我们在开头附加一个 NA
值,以使长度等于行数。
time_df$diff <- c(NA, difftime(time_df$start[-1],
time_df$end[-nrow(time_df)], units = 'mins'))
或者,如果您使用dplyr
,则可以使用lag
来获取先前的值:
library(dplyr)
time_df %>% mutate(diff = difftime(start, lag(end), units = 'mins'))
# start end diff
#1 2020-08-23 07:40:59 2020-08-23 08:15:23 NA mins
#2 2020-08-23 08:22:28 2020-08-23 08:46:41 7.1 mins
#3 2020-08-23 08:54:46 2020-08-23 09:17:05 8.1 mins
#4 2020-08-23 09:23:17 2020-08-23 09:51:20 6.2 mins
#5 2020-08-24 07:39:10 2020-08-24 08:09:29 1307.8 mins
#6 2020-08-24 08:13:06 2020-08-24 08:37:45 3.6 mins
#7 2020-09-01 10:21:04 2020-09-01 10:56:41 11623.3 mins
#8 2020-09-02 06:14:54 2020-09-02 06:43:02 1158.2 mins
#9 2020-09-02 07:44:59 2020-09-02 08:08:50 62.0 mins
关于r - 时间戳差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64023807/