计算不同行之间的时间差异

Counting difference in time between different rows

我得到了一个数据集:

head(info)

     Person     Start              End   
1 Mark     06.08.2019 00:02:56 **06.08.2019 00:14:43**
5 Wendy    06.08.2019 00:16:31 06.08.2019 00:20:53
6 Mark     **06.08.2019 00:18:28** 06.08.2019 00:24:30
7   Mark   06.08.2019 00:20:26 06.08.2019 00:23:29
8   Wendy  06.08.2019 00:26:34 06.08.2019 00:32:41
9 Lenny    06.08.2019 00:31:13 06.08.2019 00:33:14

我想要每个人的平均工作时间,但问题是我必须区分 END 和 START,但对于 Person "Mark" 来说,它将是:

(06.08.2019 00:14:43)-(06.08.2019 00:18:28),

所以不在 sam 行中,而是 info$End[1]-info$Start[2]

library(lubridate)
df<-
info%>%
  mutate(time = dmy_hms(`End`)-dmy_hms(`Start`))

会给出时间 info$End[1]-info$Start[1].

下一个问题是,计算平均时间的最有效方法是什么?

person<-
info %>%
    group_by(Person)
    %>%summarise(n=n())

会给我每个人的所有时期数。

那么,我是否应该按每个人的 time 列进行汇总,然后除以这个周期数(我们称之为 frequency)?

tidyverse 提供了对 next/prior 行执行操作的有用函数:LEADLAG。您首先需要对数据框进行排序。

类似这样的东西应该可以工作(无法测试):

library(tidyverse)
library(lubridate)

df %>%
  arrange(Person, Start) %>%
  mutate(time = dmy_hms(End) - lead(dmy_hms(Start))) %>%
  group_by(Person) %>%
  summarise((avg_time = mean(time, na.rm = T)))

希望对您有所帮助。