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)小改进.
使用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
然后将这些日期时间截断为指定的单位,在这种情况下是一天.
ddply
将summarize
根据分割后的数据帧中的函数进行评估day
.之后summarize
的所有内容都是传递给函数的参数summarize
.
归档时间: |
|
查看次数: |
10125 次 |
最近记录: |