R中的数据帧

时间:2013-04-03 18:05:09

标签: python r pandas

事实证明,

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中执行此操作?

3 个答案:

答案 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))

然后,您应该可以使用roundtrunc对日期字段进行舍入,这样您就可以将数据分解为所需的频率。

例如,

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 更好。