如何计算R中给定时间点的持续时间

如何计算R中给定时间点的持续时间,r,package,wrangle,R,Package,Wrangle,我试图找到一个包或R代码,可以帮助计算多个主题的不同时间点的持续时间 这就是数据的样子 ------------------------------------ SubjectID | Task |Duration ------------------------------------ A |Cleaning |0:10:01 A |Cleaning |2:33:54 A |Carpeting

我试图找到一个包或R代码,可以帮助计算多个主题的不同时间点的持续时间

这就是数据的样子

------------------------------------
SubjectID     | Task      |Duration
------------------------------------
A             |Cleaning   |0:10:01
A             |Cleaning   |2:33:54
A             |Carpeting  |0:16:16
A             |Carpeting  |0:19:23
A             |Painting   |0:20:16
B             |Cleaning   |1:45:60
B             |Carpeting  |0:15:01
B             |Painting   |1:15:10
B             |Painting   |0:15:60
C             |Carpeting  |1:16:16
C             |Cleaning   |0:20:16
C             |Painting   |0:30:10
-------------------------------------
我想要这张桌子

-----------------------------------------------------------------------------------
SubjectID |Number      |Number       |Number        |Total number   |Duration  |
          |of Cleaning |of Carpeting |of Painting   | of Tasks      |in hours  |
-----------------------------------------------------------------------------------
A         |  2         |      2      |      1       |    5          | 3:33:11  |
B         |  1         |      1      |      2       |    4          | 3:52:18  |
C         |  1         |      1      |      1       |    3          | 2:10:07  |
-----------------------------------------------------------------------------------
你知道有什么方法可以帮助我得到表2吗

library(dplyr)
Data_pivot <- Data %>% group_by(SubjectID) %>% summarise(number = n()
                                                   ,cleaning = sum(case_when(Task == 'Cleaning' ~ 1 
                                                                         ,TRUE ~ 0))
                                                   ,Carpeting = sum(case_when(Task == 'Carpeting' ~ 1 
                                                                             ,TRUE ~ 0))
                                                   ,Painting = sum(case_when(Task == 'Painting' ~ 1 
                                                                            ,TRUE ~ 0))
                                                   ,duration = sum(Duration)) 
好了:

library(dplyr)
Data_pivot <- Data %>% group_by(SubjectID) %>% summarise(number = n()
                                                   ,cleaning = sum(case_when(Task == 'Cleaning' ~ 1 
                                                                         ,TRUE ~ 0))
                                                   ,Carpeting = sum(case_when(Task == 'Carpeting' ~ 1 
                                                                             ,TRUE ~ 0))
                                                   ,Painting = sum(case_when(Task == 'Painting' ~ 1 
                                                                            ,TRUE ~ 0))
                                                   ,duration = sum(Duration)) 

对于处理时间和日期,lubridate软件包非常受欢迎,并且与tidyverse的其他部分(如上面Gonzalo的dplyr)配合得很好。有许多函数可以将字符串转换为日期或时间,然后再转换为可以求和的持续时间和句点

下面是一个案例示例,使用hms、时段到秒以及as.duration


如果您需要以相同的HH:MM:SS格式格式化最终的总和,您可能需要执行一些额外的技巧,如此处所示:

用于处理时间和日期,lubridate包非常流行,并且与tidyverse的其他部分(如上面Gonzalo的dplyr)配合使用效果很好。有许多函数可以将字符串转换为日期或时间,然后再转换为可以求和的持续时间和句点

下面是一个案例示例,使用hms、时段到秒以及as.duration

如果需要以相同的HH:MM:SS格式格式化最终总和,则可能需要执行一些额外的技巧,如下图所示:

> secs
[1]  601 9234  976

> durations
[1] "601s (~10.02 minutes)" "9234s (~2.56 hours)"   "976s (~16.27 minutes)"