【问题标题】:R - Converting Hourly Data in "%d/%m/%Y %H:%M" format to "%d/%m/%Y %H:%M:%S" with as.Date an as.POSIXct not WorkingR - 使用 as.Date 和 as.POSIXct 将“%d/%m/%Y %H:%M”格式的每小时数据转换为“%d/%m/%Y %H:%M:%S”在职的
【发布时间】:2020-03-18 04:36:11
【问题描述】:

我有以下数据框df

timestamp       ave.temperature min.temperature max.temperature
1/10/2017 0:00  27.20604        25.50000        28.54444
1/10/2017 1:00  27.24487        25.70000        28.60682
1/10/2017 2:00  27.26597        25.60667        28.76333
1/10/2017 3:00  27.16104        25.60000        28.32833

我想将timestamp 列转换为表单:

timestamp           ave.temperature min.temperature max.temperature
1/10/2017 00:00:00  27.20604        25.50000        28.54444
1/10/2017 01:00:00  27.24487        25.70000        28.60682
1/10/2017 02:00:00  27.26597        25.60667        28.76333
1/10/2017 03:00:00  27.16104        25.60000        28.32833

到目前为止,我已经尝试过 df$timestamp <- as.Date(df$timestamp, format="%d/%m/%Y %H:%M:%S"),但它返回了 NA 列的 NA 值:

timestamp       ave.temperature min.temperature max.temperature
NA              27.20604        25.50000        28.54444
NA              27.24487        25.70000        28.60682
NA              27.26597        25.60667        28.76333
NA              27.16104        25.60000        28.32833

但是,使用df$timestamp <- as.Date(df$timestamp, format="%d/%m/%Y %H:%M"),它变成:

timestamp  ave.temperature min.temperature max.temperature
1/10/2017  27.20604        25.50000        28.54444
1/10/2017  27.24487        25.70000        28.60682
1/10/2017  27.26597        25.60667        28.76333
1/10/2017  27.16104        25.60000        28.32833

在这一点上,我真的不知道为什么会发生这种情况,并且到目前为止还没有设法在网上找到任何类似的案例.. 一些见解将不胜感激!

备注:使用as.POSIXct(df$timestamp, format="%d/%m/%Y %H:%M:%S") 也会导致NA 用于timestamp 列。

更新:找到了解决方案,但围绕着as.Date 的谜团仍然存在(请参阅下面的答案)。

【问题讨论】:

    标签: r dataframe datetime timezone


    【解决方案1】:

    好吧..我想我可能搞砸了,但我只是发现以下工作:

    as.POSIXct(df$timestamp, format="%d/%m/%Y %H:%M")
    

    所以df变成了

    timestamp           ave.temperature min.temperature max.temperature
    1/10/2017 00:00:00  27.20604        25.50000        28.54444
    1/10/2017 01:00:00  27.24487        25.70000        28.60682
    1/10/2017 02:00:00  27.26597        25.60667        28.76333
    1/10/2017 03:00:00  27.16104        25.60000        28.32833
    

    根据需要。在这一点上,我仍然不明白为什么 as.Date 不适用。我现在不会接受我的回答,并欢迎任何有助于澄清为什么df$timestamp <- as.Date(df$timestamp, format="%d/%m/%Y %H:%M") 删除了上述问题中的每小时粒度,以及为什么df$timestamp <- as.Date(df$timestamp, format="%d/%m/%Y %H:%M:%S") 导致整个timestamp 列的答案最终拥有NA 值.. 再次感谢!

    【讨论】:

    • 这也可以as.Date("1/10/2017 0:00", "%d/%m/%Y %H:%M")as.Date 将只返回日期。你有什么问题?
    • @RonakShah as.Date("1/10/2017 0:00", "%d/%m/%Y %H:%M") 返回"2017-10-01",这不是我最初想要的(参见上面有问题的第二个数据框)。所需的日期格式为"2017-10-01 00:00:00" 形式。无论如何,我相信您刚刚回答了我关于as.Date 属性的第二个问题。谢谢!
    • 是的,如果你需要日期使用as.Date,如果你需要日期时间使用as.POSIXctstrptime
    • @RonakShah 感谢您的提示 :) 我会注意的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2017-11-02
    • 1970-01-01
    • 2021-11-26
    • 2020-05-09
    • 2016-10-15
    • 1970-01-01
    相关资源
    最近更新 更多