时间戳差异

时间:2020-09-23 08:21:02

标签: r

我有一个数据帧,其中包含两个时间戳,如下所示,在开始和结束时我找不到这两个时间戳的区别,但是我想要的是第二行的开始与第一行的结束之间的区别。 我的数据是

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)的差异

2 个答案:

答案 0 :(得分:1)

您可以从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

答案 1 :(得分:1)

使用rowSums。转换end as.numeric以获得负号。

d <- rowSums(cbind(-as.numeric(time_df$end[-nrow(time_df)]), time_df$start[-1]))

d  ## seconds
# [1]    425    485    372  78470    217 697399  69493   3717

d/60  ## minutes
# [1]     7.083333     8.083333     6.200000  1307.833333
# [5]     3.616667 11623.316667  1158.216667    61.950000