R:计算特定时间动物园对象的平均值
R: calculate mean of zoo object at particular times
我每分钟采样 3 天长的时间序列(数据)(60*24*3 个值):
require(zoo)
t<-seq(as.POSIXlt("2015/02/02 00:01:00"),as.POSIXlt("2015/02/04 24:00:00"), length.out=60*24*3)
d<-seq(1,2, length.out=60*24*3)
data<-zoo(d,t)
我要计算:
- 假设所有时间均等,每小时每一分钟的平均值(超过三天)。在这种情况下,我应该在带有时间戳的输出中有 60 个值:
01:00,02:00,...,60:00。每个平均值必须在 24x3=72 个值上计算,因为我们在三天长的时间序列中有 72 小时。
- 同上,但额外跟踪时间:
00:01:00,00:02:00,...,23:60:00。每个平均值将根据三个值计算,因为我们有三天长的时间序列。
您可以使用 data.table
和 lubridate
执行此操作:
library(data.table)
library(lubridate)
##
Dt <- data.table(
Data=as.numeric(data),
Index=index(data))
##
min_dt <- Dt[
,list(Mean=mean(Data)),
by=list(Minute=minute(Index))]
##
hmin_dt <- Dt[
,list(Mean=mean(Data)),
by=list(Hour=hour(Index),
Minute=minute(Index))]
##
R> head(min_dt)
Minute Mean
1: 1 1.493170
2: 2 1.493401
3: 3 1.493633
4: 4 1.493864
5: 5 1.494096
6: 6 1.494327
##
R> head(hmin_dt)
Hour Minute Mean
1: 0 1 1.333411
2: 0 2 1.333642
3: 0 3 1.333874
4: 0 4 1.334105
5: 0 5 1.334337
6: 0 6 1.334568
数据:
library(zoo)
t <- seq(
as.POSIXlt("2015/02/02 00:01:00"),
as.POSIXlt("2015/02/04 24:00:00"),
length.out=60*24*3)
d <- seq(1,2,length.out=60*24*3)
data <- zoo(d,t)
这两个都创建动物园系列使用aggregate.zoo
。生成的动物园系列的索引将是 chron "times"
class。
library(chron) # "times" class
aggregate(data, times(format(time(data), "00:%M:00")), mean)
aggregate(data, times(format(time(data), "%H:%M:00")), mean)
如果索引是 class "character"
没问题,那么 times
可以省略,在这种情况下不需要 chron。
我每分钟采样 3 天长的时间序列(数据)(60*24*3 个值):
require(zoo)
t<-seq(as.POSIXlt("2015/02/02 00:01:00"),as.POSIXlt("2015/02/04 24:00:00"), length.out=60*24*3)
d<-seq(1,2, length.out=60*24*3)
data<-zoo(d,t)
我要计算:
- 假设所有时间均等,每小时每一分钟的平均值(超过三天)。在这种情况下,我应该在带有时间戳的输出中有 60 个值:
01:00,02:00,...,60:00。每个平均值必须在 24x3=72 个值上计算,因为我们在三天长的时间序列中有 72 小时。
- 同上,但额外跟踪时间:
00:01:00,00:02:00,...,23:60:00。每个平均值将根据三个值计算,因为我们有三天长的时间序列。
您可以使用 data.table
和 lubridate
执行此操作:
library(data.table)
library(lubridate)
##
Dt <- data.table(
Data=as.numeric(data),
Index=index(data))
##
min_dt <- Dt[
,list(Mean=mean(Data)),
by=list(Minute=minute(Index))]
##
hmin_dt <- Dt[
,list(Mean=mean(Data)),
by=list(Hour=hour(Index),
Minute=minute(Index))]
##
R> head(min_dt)
Minute Mean
1: 1 1.493170
2: 2 1.493401
3: 3 1.493633
4: 4 1.493864
5: 5 1.494096
6: 6 1.494327
##
R> head(hmin_dt)
Hour Minute Mean
1: 0 1 1.333411
2: 0 2 1.333642
3: 0 3 1.333874
4: 0 4 1.334105
5: 0 5 1.334337
6: 0 6 1.334568
数据:
library(zoo)
t <- seq(
as.POSIXlt("2015/02/02 00:01:00"),
as.POSIXlt("2015/02/04 24:00:00"),
length.out=60*24*3)
d <- seq(1,2,length.out=60*24*3)
data <- zoo(d,t)
这两个都创建动物园系列使用aggregate.zoo
。生成的动物园系列的索引将是 chron "times"
class。
library(chron) # "times" class
aggregate(data, times(format(time(data), "00:%M:00")), mean)
aggregate(data, times(format(time(data), "%H:%M:00")), mean)
如果索引是 class "character"
没问题,那么 times
可以省略,在这种情况下不需要 chron。