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中执行此操作?
答案 0 :(得分: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, ...)
答案 1 :(得分: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
是您要平均的字段的名称。
答案 2 :(得分:0)
就我个人而言,我非常喜欢这些操作的 lubridate 和 zoo 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 更好。