将每小时数据聚合到每日聚合中

ery*_*ery 14 time datetime aggregate r

我有以下格式的每小时天气数据:

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
Run Code Online (Sandbox Code Playgroud)

我需要的是每日聚合最大值,最小值,如此:

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
Run Code Online (Sandbox Code Playgroud)

在R中如何做到这一点?

G. *_*eck 20

1)这可以使用动物园紧凑地完成:

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)
Run Code Online (Sandbox Code Playgroud)

这给出了:

> z
           min max     mean
2000-01-01  30  33 31.33333
2000-12-31  25  25 25.00000
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

最后一行给出:

> 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
Run Code Online (Sandbox Code Playgroud)

编辑:(1)自从第一次出现以来,在动物园包中添加了text=参数read.zoo.(2)小改进.


Jor*_*eys 5

使用strptime(),trunc()ddply()从plyr包:

#Make the data
ZZ <- textConnection("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")
dataframe <- read.csv(ZZ,header=T)
close(ZZ)

# Do the calculations
dataframe$Date <- strptime(dataframe$Date,format="%m/%d/%Y %H:%M")
dataframe$day <- trunc(dataframe$Date,"day")

require(plyr)

ddply(dataframe,.(day),
      summarize,
      aveDBT=mean(DBT),
      maxDBT=max(DBT),
      minDBT=min(DBT)
)
Run Code Online (Sandbox Code Playgroud)

         day   aveDBT maxDBT minDBT
1 2000-01-01 31.33333     33     30
2 2000-12-31 25.00000     25     25
Run Code Online (Sandbox Code Playgroud)

澄清 :

strptime根据格式将字符转换为日期.要了解如何指定格式,请参阅?strptime.trunc然后将这些日期时间截断为指定的单位,在这种情况下是一天.

ddplysummarize根据分割后的数据帧中的函数进行评估day.之后summarize的所有内容都是传递给函数的参数summarize.