【问题标题】:create date-time by combining date and hour using dplyr and lubridate通过使用 dplyr 和 lubridate 组合日期和小时来创建日期时间
【发布时间】:2019-10-23 23:55:19
【问题描述】:

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

我查看了 lubridate 示例并尝试了不同的语法,但没有找到一种有效的语法。

这是数据和代码:

小日期

# 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, dots) 中的错误: 列 newdate 属于不受支持的类 POSIXlt

我希望创建一个可用于绘制数据的新日期时间字段。感谢您的帮助。

【问题讨论】:

  • 如果已经是几个小时了,为什么还要再次获取hours
  • 我需要在同一字段中组合日期和时间,以便我可以在时间线等上绘制图表(感谢 NelsonGon 清理发布格式)。

标签: r dplyr lubridate


【解决方案1】:

使用ymd_h

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

【讨论】:

  • 但是我认为你不应该从 Interval 中减去 1,因为它代表一天中的小时。
  • 谢谢,效果很好。我减去 1 因为我想要构成 2019 年 3 月 21 日这一天的 24 小时。如果我不减去 1,那么 2019-03-21 小时 24 会变成 2019-03-22 小时 00,这样我在 3 月 21 日就只有 23 小时了。再次感谢。
【解决方案2】:

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

     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

【讨论】:

    【解决方案3】:

    这是通过将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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多