将 hms 列拆分为 30 分钟的间隔

Split hms column into 30 minute intervals

我有运动测试期间的参与者数据,其中包括参与者 ID、条件(环境或控制)和完成测试所需的总时间。我的数据的一个小例子:

    RawData <- data.frame(
      ParticipantID = c (1:6), 
      Condition = c("Control","Experimental","Experimental","Control","Experimental","Control"),
      Time = c("04:34:22","02:48:47","04:22:06","02:57:11","02:07:11","05:34:22"))

然后我使用了 lubridate 包,所以我有时间在 hms 通过:

RawData <- RawData %>% 
  mutate(TotalTime = hms::as_hms(Time)) 

现在我想创建一个新列,将每个 RawData$TotalTime 结果归入一个类别,包括:Sub2、Sub230、Sub3、Sub330、Sub4、Sub430、Sub5、Sub530 和 Sub6。我可能可以通过一个很长的 case_when 语句来做到这一点,但是在 lubridate 中有没有一种简单的方法可以做到这一点,因为我是在 30 分钟的间隔之后?

我想要的输出是:

   RawData <- data.frame(
      ParticipantID = c (1:6), 
      Condition = c("Control","Experimental","Experimental","Control","Experimental","Control"),
      Time = c("04:34:22","02:48:47","04:22:06","02:57:11","02:07:11","05:34:22"),
      Category = c("Sub5","Sub3","Sub430","Sub3","Sub230","Sub6"))

谢谢!

您可以将 ceiling_date 函数与 units 一起用作“30 分钟”。

library(dplyr)
library(lubridate)

RawData %>%
  mutate(TotalTime = as.POSIXct(Time, format = '%T'),
         Category = format(ceiling_date(TotalTime, '30 mins'), "%H%M")) %>%
  select(-TotalTime)


#  ParticipantID    Condition     Time Category
#1             1      Control 04:34:22     0500
#2             2 Experimental 02:48:47     0300
#3             3 Experimental 04:22:06     0430
#4             4      Control 02:57:11     0300
#5             5 Experimental 02:07:11     0230
#6             6      Control 05:34:22     0600