我在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。
答案 0 :(得分:0)
选项1:使用lubridate
或ceiling_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,将其转换回POSIXct
和aggregate
即可获得{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)