如何在 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_Start
和 Time_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))
我的数据有关于时间间隔的信息和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_Start
和 Time_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))