我有一个小时的天气数据,格式如下:
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)这可以使用动物园紧凑地完成:
L <- "Date,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)由于第一次出现在动物园包中添加了read.zoo的text =参数.(2)小改进.