R-将“%d /%m /%Y%H:%M”格式的每小时数据转换为“%d /%m /%Y%H:%M:%S”,日期为as.POSIXct工作中

时间:2019-11-22 06:21:57

标签: r dataframe datetime timezone

我有以下数据框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列返回了timestamp值:

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的谜团(请参阅下面的答案)。

1 个答案:

答案 0 :(得分:0)

好吧。。我想我可能已经花了很多时间了,但是我发现以下方法可以解决

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个值。.再次感谢!