我的数据有关于时间间隔和活动的信息(由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中转换这个?
发布于 2020-08-10 01:50:06
我们可以将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))
https://stackoverflow.com/questions/63333034
复制相似问题