data.frame 中列的基于时间的平均(滑动窗口)

2024-03-15

我有一个包含多列的 data.frame 。其中一列是时间,因此是非递减的。其余列包含在 data.frame 的某一行中指定的时间给定的时间记录的观察结果。

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

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

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

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


假设你的data.frame仅包含数字数据,这是使用 Zoo/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 开始。

> nSeconds <- 5
> agg <- aggregate(Data[,-1], by=list(as.numeric(Data$Time) %/% nSeconds), mean)
> agg[,1] <- .POSIXct(agg[,1]*nSeconds)  # >= R-2.12.0 required for .POSIXct
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

data.frame 中列的基于时间的平均(滑动窗口) 的相关文章

随机推荐