我想在两个日期之间生成一系列时间戳
所以测试框架是:
library(dplyr)
library(lubridate)
library(purrr)
library(tibble)
test <- tibble(category = c('a', 'b', 'a'),
start=c('2016-01-01 00:00:10',
'2016-02-01 00:00:20',
'2016-03-01 00:00:30'),
end = c('2016-01-01 00:01:00',
'2016-02-01 00:02:00',
'2016-03-01 00:03:00')) %>%
mutate(start = ymd_hms(start),
end = ymd_hms(end) )
我想跑:
seq(start, end, by=10)
对于每一行并在一个数据框中有一个序列,所以结果如下:
category | timestamp
a | 2016-01-01 00:00:10
a | 2016-01-01 00:00:20
a | 2016-01-01 00:00:30
对于每一行和所有它rbind
我有超过30000行,所以一个for循环将无法正常工作。
我尝试使用purrr
:
gg <- test %>%
purrr::map( seq(start, end, by=10) )
但这似乎不起作用?
我们可以单独使用dplyr
来做到这一点
library(dplyr)
test %>%
group_by(category, n = row_number()) %>%
do(data.frame(Seq = seq(.$start, .$end, by = 10))) %>%
ungroup() %>%
select(-n)
或者使用map
的purrr
test %>%
split(., seq_len(nrow(test))) %>%
map_df(~cbind(., Seq = seq(.$start, .$end, by = 10)))