0

事实证明, Pandas 作为处理时间序列数据的工具非常成功。例如,执行 5 分钟意味着您可以使用如下resample函数:

import pandas as pd
dframe = pd.read_table("test.csv", 
               delimiter=",", index_col=0, parse_dates=True,     date_parser=parse)
## 5  minutes mean
dframe.resample('t', how = 'mean')
## daily mean
ts.resample('D', how='mean')

我如何在 R 中执行此操作?

4

3 回答 3

3

在 R 中,您可以使用xts专门用于时间序列操作的包。例如,您可以period.apply像这样使用函数:

library(xts)
zoo.data <- zoo(rnorm(31)+10,as.Date(13514:13744,origin="1970-01-01"))
ep <- endpoints(zoo.data,'days')
## daily mean 
period.apply(zoo.data, INDEX=ep, FUN=function(x) mean(x))

这个函数有一些方便的包装器,

apply.daily(x, FUN, ...)
apply.weekly(x, FUN, ...)
apply.monthly(x, FUN, ...)
apply.quarterly(x, FUN, ...)
apply.yearly(x, FUN, ...)
于 2013-04-03T18:13:14.867 回答
0

R 有数据帧(data.frame),它也可以读取 csv 文件。例如。

dframe <- read.csv2("test.csv")

对于日期,您可能需要使用 colClasses 参数指定列。见?read.csv2。例如:

dframe <- read.csv2("test.csv", colClasses=c("POSIXct",NA,NA))

然后,您应该能够使用round或对日期字段进行四舍五入trunc,这将允许您将数据分解为所需的频率。

例如,

dframe$trunc.times <- trunc(dframe$date.field,1,units='mins');
means <- daply(dframe, 'trunc.times', function(df) { return( mean(df$value) ) });

value您要平均的字段名称在哪里。

于 2013-04-03T18:11:22.550 回答
0

就个人而言,我真的很喜欢lubridatezoo aggregate() 的组合用于这些操作:

ts.month.sum <- aggregate(ts.data, month, sum)

ts.daily.mean <- aggregate(ts.data, day, mean)

ts.mins.mean <- aggregate(ts.data, minutes, mean)

您还可以使用标准时间函数 yearmon() 或 yearqtr(),或用于拆分和应用的自定义函数。这种方法在语法上和pandas一样甜美。

于 2015-09-21T21:02:37.240 回答