将小时数据转换为R中的每小时和向上舍入时间

时间:2017-04-02 06:22:42

标签: r date

我在R中有一个非常大的数据框,包含具有以下格式的天气数据。

                 valid temp
    1 17/08/2014 00:20   14
    2 17/08/2014 00:50   14
    3 17/08/2014 01:20   13.5
    4 17/08/2014 01:50   13
    5 17/08/2014 02:20   12
    6 17/08/2014 02:50   10

我想将这些小时数据转换为每小时,如下所示。

                    valid tmpc
    1 2014-08-17 00:00:00   14
    2 2014-08-17 01:00:00   13.75
    3 2014-08-17 02:00:00   12.5

df $有效的等级是'因素'。我曾尝试首先通过POSIXct将它们转换为Date,但它只提供NA值。我也尝试过更改系统区域设置,但仍然可以使用NAs。

2 个答案:

答案 0 :(得分:0)

选项1:使用lubridateceiling_date的{​​{1}}解决方案。根据您的数据框架和结果,如果您想要的是圆形或天花板,则不清楚。例如,在第一行中,您将进行四舍五入,在第三行中使用上限。无论如何这里的例子:

round_date

结果:

library(lubridate)
df <- data.frame(i = 1, valid= "17/08/2014 01:28", temp = 14)
df$valid <- dmy_hm(df$valid)
df$valid_round <- ceiling_date(df$valid , unit="hours")

选项2:使用 i valid temp valid_round 1 1 2014-08-17 01:28:00 14 2014-08-17 02:00:00 函数。使用:     df $ valid&lt; - as.POSIXct(strptime(df $ valid,&#34;%d /%m /%Y%H:%M&#34;,tz =&#34; UTC&#34;)) 然后围绕它。

答案 1 :(得分:0)

我们可以在base R中执行此操作,转换为POSIXlt,将minute设置为0,将其转换回POSIXctaggregate即可获得{temp}的mean

df1$valid <- strptime(df1$valid, "%d/%m/%Y %H:%M")
df1$valid$min <- 0
df1$valid <- as.POSIXct(df1$valid)
aggregate(temp~valid, df1, FUN = mean)