如何在 R 中将时间间隔数据更改为逐分钟数据?

How do you change time interval data to minute by minute data in R?

我的数据有关于时间间隔的信息和activity在那段时间(用1,0表示)。 例如,

  ID#   Time_Start  Time_End   Activity 
   1     10:05:58   10:07:11      1
   1     10:07:12   10:10:01      0

我想将时间四舍五入到最接近的分钟并将此数据转换为逐分钟数据。 例如,

  ID#   Time    Activity 
   1    10:05       1
   1    10:06       1      
   1    10:07       1
   1    10:08       0
   1    10:09       0
  

我如何在 R 中转换它?

我们可以将 Time_StartTime_End 值更改为 POSIXct 并使用 floor_date 将其四舍五入到最近的分钟。然后在开始值和结束值之间创建一个间隔为每分钟的序列,仅保留唯一值并以所需格式获取 Time

library(dplyr)

df %>%
  mutate(across(starts_with('Time_'), ~lubridate::floor_date(
                                 as.POSIXct(.,format = "%T"), 'minute')), 
         Time = purrr::map2(Time_Start, Time_End, seq, by = 'min')) %>%
  tidyr::unnest(Time) %>%
  select(-starts_with('Time_')) %>%
  distinct(ID, Time, .keep_all = TRUE) %>%
  mutate(Time = format(Time, '%H:%M'))

#     ID Activity Time 
#  <int>    <int> <chr>
#1     1        1 10:05
#2     1        1 10:06
#3     1        1 10:07
#4     1        0 10:08
#5     1        0 10:09
#6     1        0 10:10

数据

df <- structure(list(ID = c(1L, 1L), Time_Start = c("10:05:58", "10:07:12"
), Time_End = c("10:07:11", "10:10:01"), Activity = 1:0), 
class = "data.frame", row.names = c(NA, -2L))