计算不同行之间的时间差异
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 行执行操作的有用函数:LEAD
和 LAG
。您首先需要对数据框进行排序。
类似这样的东西应该可以工作(无法测试):
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)))
希望对您有所帮助。
我得到了一个数据集:
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 行执行操作的有用函数:LEAD
和 LAG
。您首先需要对数据框进行排序。
类似这样的东西应该可以工作(无法测试):
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)))
希望对您有所帮助。