2010-10-20 135 views
5

我有一个data.frame有多个列。其中一列是时间,因此是不减少的。其余列包含在data.frame的某一行中指定的时间给定的时间记录的观察值。data.frame中列的基于时间的平均(滑动窗口)

我想选择一个时间窗口,例如“x”秒,并计算该窗口的相同data.frame中某些其他列的条目的平均值(或者对于任何函数)。

当然,由于其基于时间的平均值,窗口中的条目数量可能因数据而异。这是因为属于某个时间窗口的行数可能会有所不同。

我已经做了这个使用自定义函数,它在data.frame中创建一个新的列。新列为一个时间窗口中的所有条目分配一个编号。该数字在所有时间窗口中都是唯一的。这基本上根据时间窗口将数据分成组。然后我使用R的“聚合”函数来计算均值。

我只是想知道是否有一个现有的R函数可以根据时间间隔进行分组,或者是否有更好的方法来完成此操作。

+0

您能否提供一些示例数据?最好的解决方案将取决于你的数据是什么样子。 – 2010-10-20 17:56:59

+0

我想知道如果这是可能的,因为我这样做我的自我,但它是非常消耗CPU,所以我不知道也许我必须设置窗口到一个更大的值,反正TY;) – HanniBaL90 2016-11-24 18:07:25

回答

4

假设你data.frame只包含数字数据,这是利用动物园/ XTS做到这一点的一种方法:

> Data <- data.frame(Time=Sys.time()+1:20,x=rnorm(20)) 
> xData <- xts(Data[,-1], Data[,1]) 
> period.apply(xData, endpoints(xData, "seconds", 5), colMeans) 
          [,1] 
2010-10-20 13:34:19 -0.20725660 
2010-10-20 13:34:24 -0.01219346 
2010-10-20 13:34:29 -0.70717312 
2010-10-20 13:34:34 0.09338097 
2010-10-20 13:34:38 -0.22330363 

编辑:只用基础R软件包。手段是相同的,但时间稍有不同,因为endpoints开始5秒间隔与第一次观察。下面的代码组以5秒的间隔开始,秒数为0.

+0

感谢您的答案,这是正确的,但我仍然对其他人如何使用R – nixbox 2010-10-20 19:50:03

+0

解决这个问题感兴趣但是,这个_is_正在使用R ...还是您在寻找仅使用基本R软件包的解决方案? – 2010-10-20 20:09:08

+0

是的东西使用基R或至少保留data.frame类型,虽然我检查了我可以在xts上使用as.data.frame将其转换回来,唯一的是我将不得不显式添加另一列使用行.names(时间信息),以便用ggplot2创建图表 – nixbox 2010-10-20 20:50:30