gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:23:15 24 4
gpt4 key购买 nike

我有一个包含多列的 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 秒间隔。下面的代码以秒 = 0 开始,以 5 秒为间隔进行分组。
> 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

关于r - data.frame 中列的基于时间的平均(滑动窗口),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com