【问题标题】:obtain hour from DateTime vector从 DateTime 向量中获取小时
【发布时间】:2012-05-27 20:00:50
【问题描述】:

我在 data.frame 中有一个 DateTime 向量,其中数据框由 8760 个观测值组成,代表全年的每小时间隔,例如

2010-01-01 00:00
2010-01-01 01:00
2010-01-01 02:00
2010-01-01 03:00

等等。

我想创建一个 data.frame,它的第一列是原始的 DateTime 向量,然后是第二列中的每小时值,例如

2010-01-01 00:00          00:00
2010-01-01 01:00          01:00

如何做到这一点?

【问题讨论】:

    标签: r date time


    【解决方案1】:

    一般来说,对于从谷歌来到这里并可能想要按小时分组的任何人:

    这里的关键是:lubridate::hour(datetime)

    此处的 cran 文档中的 p22:https://cran.r-project.org/web/packages/lubridate/lubridate.pdf

    【讨论】:

      【解决方案2】:

      使用lubridate

      library(stringr)
      library(lubridate)
      library(plyr)
      
      df <- data.frame(DateTime = c("2010-01-01 00:00", "2010-01-01 01:00", "2010-01-01 02:00", "2010-01-01 03:00"))
      
      df <- mutate(df, DateTime = ymd_hm(DateTime),
                       time  = str_c(hour(DateTime), str_pad(minute(DateTime), 2, side = 'right', pad = '0'), sep = ':'))
      

      【讨论】:

        【解决方案3】:

        使用formatstrptime提取时间信息。

        创建一个 POSIXct 向量:

        x <- seq(as.POSIXct("2012-05-21"), by=("+1 hour"), length.out=5)
        

        提取时间:

        data.frame(
          date=x,
          time=format(x, "%H:%M")
        )
        
                         date  time
        1 2012-05-21 00:00:00 00:00
        2 2012-05-21 01:00:00 01:00
        3 2012-05-21 02:00:00 02:00
        4 2012-05-21 03:00:00 03:00
        5 2012-05-21 04:00:00 04:00
        

        如果输入向量是字符向量,则必须先转换为POSIXct:

        创建一些数据

        dat <- data.frame(
          DateTime=format(seq(as.POSIXct("2012-05-21"), by=("+1 hour"), length.out=5), format="%Y-%m-%d %H:%M")
        )
        dat
                  DateTime
        1 2012-05-21 00:00
        2 2012-05-21 01:00
        3 2012-05-21 02:00
        4 2012-05-21 03:00
        5 2012-05-21 04:00
        

        拆分超时:

        data.frame(
          DateTime=dat$DateTime,
          time=format(as.POSIXct(dat$DateTime, format="%Y-%m-%d %H:%M"), format="%H:%M")
        )
        
                  DateTime  time
        1 2012-05-21 00:00 00:00
        2 2012-05-21 01:00 01:00
        3 2012-05-21 02:00 02:00
        4 2012-05-21 03:00 03:00
        5 2012-05-21 04:00 04:00
        

        【讨论】:

        • 日期时间向量是从文本文件导入到 r 中的,因此我不是简单地拥有格式为 YYYY-dd-mm 的向量,而是作为 YYYY-dd-mm HH:MM 因此通过替换时间上面我的矢量它不起作用。如何将我拥有的向量(即格式 YYYY-mm-dd HH:MM)转换为 POSIXct 向量?
        • 使用 as.POSIXct 并规定格式作为参数。参见 ?as.POSIXct
        • 我试过 x
        • 你的“DateTime”对象的类是什么?你的问题让我相信这是一个 DateTime 对象,即 POSIXct。
        • 我没有接受的原因是它不是我想要的,我上面说过这并不像我预期的那样工作!
        【解决方案4】:

        或者一般来说,不将它们视为日期,只要正确填充时间和日期,您可以使用以下内容。

        library(stringr)
        df <- data.frame(DateTime = c("2010-01-01 00:00", "2010-01-01 01:00", "2010-01-01 02:00", "2010-01-01 03:00"))
        df <- data.frame(df, Time = str_sub(df$DateTime, -5, -1))
        

        这真的取决于您的需求。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-15
          • 1970-01-01
          • 2021-02-05
          • 2010-10-09
          • 1970-01-01
          • 2010-11-20
          • 2014-07-12
          相关资源
          最近更新 更多