使用中间日期时间展开数据框日期时间列的行

时间:2018-03-12 18:35:11

标签: r datetime dataframe

我有一个日期时间列,其中包含非连续日期时间(全部按小时计算),如下所示:

dat <- data.frame(dt = as.POSIXct(c("2018-01-01 12:00:00",
                                    "2018-01-13 01:00:00",
                                    "2018-02-01 11:00:00")))

# Output:
#                   dt
#1 2018-01-01 12:00:00
#2 2018-01-13 01:00:00
#3 2018-02-01 11:00:00

我希望扩展列dt的行,以便在最小和最大日期时间之间的每小时显示,如下所示:

# Desired output:
#                   dt
#1 2018-01-01 12:00:00
#2 2018-01-01 13:00:00
#3 2018-01-01 14:00:00
#4                   .
#5                   .

等等。基于tidyverse的解决方案是最受欢迎的。

1 个答案:

答案 0 :(得分:2)

@ DavidArenburg的评论是寻找矢量的方法。但是,如果您想在数据框中展开dt与您希望保留的其他列,您可能会对tidyr::completetidyr::full_seq结合感兴趣:

dat <- data.frame(dt = as.POSIXct(c("2018-01-01 12:00:00",
                                    "2018-01-13 01:00:00",
                                    "2018-02-01 11:00:00")))
dat$a <- letters[1:3]
dat
#>                    dt a
#> 1 2018-01-01 12:00:00 a
#> 2 2018-01-13 01:00:00 b
#> 3 2018-02-01 11:00:00 c

library(tidyr)

res <- complete(dat, dt = full_seq(dt, 60 ** 2))

print(res, n = 5)
#> # A tibble: 744 x 2
#>   dt                  a    
#>   <dttm>              <chr>
#> 1 2018-01-01 12:00:00 a    
#> 2 2018-01-01 13:00:00 <NA> 
#> 3 2018-01-01 14:00:00 <NA> 
#> 4 2018-01-01 15:00:00 <NA> 
#> 5 2018-01-01 16:00:00 <NA> 
#> # ... with 739 more rows

reprex package(v0.2.0)创建于2018-03-12。