R的时间数据补码

问题描述 投票:0回答:1

有以下数据框

> start_time <- c("11:23","16:21","18:57","22:00")
> end_time <- c("11:33","16:23","19:03","22:05")
> vol <- c("red","green","blue","black")
> x <- data.frame(start_time,end_time,vol)
> x
  start_time end_time   vol
1      11:23    11:33   red
2      16:21    16:23 green
3      18:57    19:03  blue
4      22:00    22:05 black

我想如下转换此数据帧。

> time <- c("11:23","11:24","11:25","16:21","16:22","16:23","16:24","18:57","18:58","18:59","19:00","19:01","22:00","22:01","22:02")
> vol <- c("red","red","red","green","green","green","green","blue","blue","blue","blue","blue","black","black","black")
> y <- data.frame(time,vol)
> y
    time   vol
1  11:23   red
2  11:24   red
3  11:25   red
4  16:21 green
5  16:22 green
6  16:23 green
7  16:24 green
8  18:57  blue
9  18:58  blue
10 18:59  blue
11 19:00  blue
12 19:01  blue
13 22:00 black
14 22:01 black
15 22:02 black

它从头到尾每1分钟添加一次记录。R有可能吗?谢谢

r
1个回答
0
投票

您可以将'time'列转换为POSIXct格式,在start_timeend_time之间创建1分钟的序列并扩展数据。

library(dplyr)

x %>%
  mutate_at(vars(ends_with('_time')), as.POSIXct, format = '%H:%M') %>%
  mutate(time = purrr::map2(start_time, end_time, seq, by = 'min')) %>%
  tidyr::unnest(time) %>%
  mutate(time = format(time, '%H:%M')) %>%
  select(-ends_with('_time'))

# A tibble: 27 x 2
#   vol   time 
#   <chr> <chr>
# 1 red   11:23
# 2 red   11:24
# 3 red   11:25
# 4 red   11:26
# 5 red   11:27
# 6 red   11:28
# 7 red   11:29
# 8 red   11:30
# 9 red   11:31
#10 red   11:32
# … with 17 more rows
© www.soinside.com 2019 - 2024. All rights reserved.