矢量化seq R.

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

我想在两个日期之间生成一系列时间戳

所以测试框架是:

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) )

但这似乎不起作用?

r purrr
1个回答
3
投票

我们可以单独使用dplyr来做到这一点

library(dplyr)
test %>% 
    group_by(category, n = row_number()) %>% 
    do(data.frame(Seq = seq(.$start, .$end, by = 10))) %>%
    ungroup() %>%
    select(-n)

或者使用mappurrr

test %>% 
   split(., seq_len(nrow(test))) %>% 
   map_df(~cbind(., Seq = seq(.$start, .$end, by = 10)))
© www.soinside.com 2019 - 2024. All rights reserved.