将分钟作为 as.ITime() 添加到 as.ITime() 作为固定时间

Add minutes as as.ITime() to as.ITime() as fixed time

我遵循了这个 但遇到了几个问题。

我有

# A tibble: 6 x 2
  OnsetTime TotalSleepTime
  <chr>              <dbl>
1 22:55:00             448
2 23:13:00             420
3 01:45:00             327
4 00:13:00             448
5 01:05:00             349
6 23:50:00             466

q$TotalSleepTime 以分钟为单位,我想将这些分钟添加到 q$OnsetTime 并用该时间创建一个新列。

我试过了

q %>% mutate(newtime = as.ITime(OnsetTime) + as.ITime(TotalSleepTime))

但这不会产生所需的输出:

# A tibble: 10 x 2
   TotalSleepTime newtime 
            <dbl> <ITime> 
 1            448 23:02:28
 2            420 23:20:00
 3            327 01:50:27
 4            448 00:20:28
 5            349 01:10:49
 6            466 23:57:46

我正在 data.tablelubridate 中寻求解决方案。

我也试过了

 q %>% mutate(
         TotalSleepTime_new = as.integer(TotalSleepTime/60),
         newtime = hms(OnsetTime) + hours(TotalSleepTime_new))

数据

q <- structure(list(OnsetTime = c("22:55:00", "23:13:00", "01:45:00", 
"00:13:00", "01:05:00", "23:50:00"), TotalSleepTime = c(448, 
420, 327, 448, 349, 466)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

在R中添加时间是以秒为单位的。既然你有时间,我们需要乘以。

library(dplyr)
q %>%
  mutate(newtime = as.ITime(OnsetTime) + 60*TotalSleepTime)
# # A tibble: 6 x 3
#   OnsetTime TotalSleepTime newtime 
#   <chr>              <dbl> <ITime> 
# 1 22:55:00             448 30:23:00
# 2 23:13:00             420 30:13:00
# 3 01:45:00             327 07:12:00
# 4 00:13:00             448 07:41:00
# 5 01:05:00             349 06:54:00
# 6 23:50:00             466 31:36:00

library(data.table)
as.data.table(q)[, newtime := as.ITime(OnsetTime) + 60*TotalSleepTime][]
#    OnsetTime TotalSleepTime  newtime
#       <char>          <num>  <ITime>
# 1:  22:55:00            448 30:23:00
# 2:  23:13:00            420 30:13:00
# 3:  01:45:00            327 07:12:00
# 4:  00:13:00            448 07:41:00
# 5:  01:05:00            349 06:54:00
# 6:  23:50:00            466 31:36:00