通过使用dplyr和lubridate组合日期和小时来创建日期时间

时间:2019-06-09 04:00:31

标签: r dplyr lubridate

我的数据有一个Flowday变量(一个日期)和一个Interval变量(双精度),它们代表一天中的小时。我正在使用dplyrlubridate并试图将它们结合起来以创建一个带有两个datend小时的新datetime列(首先,我需要从小时中减去1,因为无法识别24小时)。

我看过lubridate示例,并尝试了不同的语法,但没有找到一种可行的方法。

以下是数据和代码:

tiny_date

# A tibble: 7 x 3
  Element       Flowday    Interval
  <chr>         <date>        <dbl>
1 Sterlington 1 2019-03-21     1.00
2 Sterlington 1 2019-03-21     2.00
3 Sterlington 1 2019-03-21     3.00
4 Sterlington 1 2019-03-21     4.00
5 Sterlington 1 2019-03-21    22.0 
6 Sterlington 1 2019-03-21    23.0 
7 Sterlington 1 2019-03-21    24.0

mutate(tiny_date, newdate = Flowday +hours(Interval - 1))

  

mutate_impl(.data,点)中的错误:     列newdate属于不支持的类POSIXlt

我希望创建一个新的日期时间字段,以用于图形化数据。感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

使用ymd_h

library(dplyr)
library(lubridate)
mutate(tiny_date, newdate = ymd_h(paste(Flowday, Interval - 1)))

答案 1 :(得分:1)

不确定,但您可以这样做:

     df %>% 
  mutate(newdate=as.POSIXct(hours((Interval-1))+ ymd(Flowday))) 


      Element    Flowday Interval             newdate
1 Sterlington 2019-03-21        1 2019-03-21 00:00:00
2 Sterlington 2019-03-21        2 2019-03-21 01:00:00
3 Sterlington 2019-03-21        3 2019-03-21 02:00:00
4 Sterlington 2019-03-21        4 2019-03-21 03:00:00
5 Sterlington 2019-03-21       22 2019-03-21 21:00:00
6 Sterlington 2019-03-21       23 2019-03-21 22:00:00
7 Sterlington 2019-03-21       24 2019-03-21 23:00:00

答案 2 :(得分:1)

这是将Interval - 1粘贴到Flowday并指定format的基本R方法。

as.POSIXct(paste(df$Flowday, df$Interval - 1), format = "%Y-%m-%d %H", tz = "GMT")

#[1] "2019-03-21 00:00:00 GMT" "2019-03-21 01:00:00 GMT" "2019-03-21 02:00:00 GMT"
#[4] "2019-03-21 03:00:00 GMT" "2019-03-21 21:00:00 GMT" "2019-03-21 22:00:00 GMT" 
#[7] "2019-03-21 23:00:00 GMT"