我有以下格式的每小时天气数据:
Date,DBT
01/01/2000 01:00,30
01/01/2000 02:00,31
01/01/2000 03:00,33
...
...
12/31/2000 23:00,25
我需要的是每天的最大,最小,平均值之和,例如:
Date,MaxDBT,MinDBT,AveDBT
01/01/2000,36,23,28
01/02/2000,34,22,29
01/03/2000,32,25,30
...
...
12/31/2000,35,9,20
如何在R中执行此操作?
最佳答案
1)这可以使用zoo紧凑地完成:
L <- "Date,DBT
01/01/2000 01:00,30
01/01/2000 02:00,31
01/01/2000 03:00,33
12/31/2000 23:00,25"
library(zoo)
stat <- function(x) c(min = min(x), max = max(x), mean = mean(x))
z <- read.zoo(text = L, header = TRUE, sep = ",", format = "%m/%d/%Y", aggregate = stat)
这给出:
> z
min max mean
2000-01-01 30 33 31.33333
2000-12-31 25 25 25.00000
2)这是仅使用核心R的解决方案:
DF <- read.csv(text = L)
DF$Date <- as.Date(DF$Date, "%m/%d/%Y")
ag <- aggregate(DBT ~ Date, DF, stat) # same stat as in zoo solution
最后一行给出:
> ag
Date DBT.min DBT.max DBT.mean
1 2000-01-01 30.00000 33.00000 31.33333
2 2000-12-31 25.00000 25.00000 25.00000
编辑:(1)自从这第一次出现以来,对
text=
的read.zoo
参数已添加到zoo包中。(2)细微的改进。
关于datetime - 将每小时数据汇总为每日汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200437/