【问题标题】:Counting difference in time between different rows计算不同行之间的时间差异
【发布时间】:2019-08-07 07:53:25
【问题描述】:

我有一个数据集:

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,但对于“标记”人来说,它将是:

(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())

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

那么,我应该按每个人的时间列汇总,然后除以这个时期数(我们称之为频率)吗?

【问题讨论】:

    标签: r row lubridate dplyr


    【解决方案1】:

    tidyverse 提供有用的函数来对下一行/前一行执行操作: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)))
    

    希望对你有帮助。

    【讨论】:

    • 谢谢!这就是我一直在寻找的 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2018-04-02
    相关资源
    最近更新 更多