有以下数据框
> 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有可能吗?谢谢
您可以将'time'
列转换为POSIXct
格式,在start_time
和end_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