在数据表中查找过去2分钟内的平均值

保罗耶巴

我试图在同一data.table中的某个时间范围内找到平均值,然后将其保存到新列中。

以下是样本数据集

更新了数据集以代表原始数据集中的不连续时间线。

> x
                     ts value avg
 1: 2015-01-01 00:00:23     9   0
 2: 2015-01-01 00:01:56    11   0
 3: 2015-01-01 00:02:03    18   0
 4: 2015-01-01 00:03:16     1   0
 5: 2015-01-01 00:05:19     6   0
 6: 2015-01-01 00:05:54    16   0
 7: 2015-01-01 00:06:27    13   0
 8: 2015-01-01 00:06:50     7   0
 9: 2015-01-01 00:08:41    12   0
10: 2015-01-01 00:09:08    17   0
11: 2015-01-01 00:09:28     8   0
12: 2015-01-01 00:10:56     5   0
13: 2015-01-01 00:11:44    10   0
14: 2015-01-01 00:12:23    20   0
15: 2015-01-01 00:12:28     2   0
16: 2015-01-01 00:12:37    15   0
17: 2015-01-01 00:12:42     4   0
18: 2015-01-01 00:12:48    19   0
19: 2015-01-01 00:13:41     3   0
20: 2015-01-01 00:16:04    14   0

我的代码将值10.5分配给所有行,但没有得到预期的结果。这是我的代码。

require(lubridate)
x[, avg :=  x[ts>=ts-minutes(2) & ts<=ts , mean(value)], verbose=TRUE  ]

更新

我希望结果如下

                   ts   value   avg
1   01-01-2015 00:00:23 9   0
2   01-01-2015 00:01:56 11  9
3   01-01-2015 00:02:03 18  10
4   01-01-2015 00:03:16 1   14.5
5   01-01-2015 00:05:19 6   0
6   01-01-2015 00:05:54 16  6
7   01-01-2015 00:06:27 13  11
8   01-01-2015 00:06:50 7   11.66666667
9   01-01-2015 00:08:41 12  7
10  01-01-2015 00:09:08 17  12
11  01-01-2015 00:09:28 8   14.5
12  01-01-2015 00:10:56 5   12.5
13  01-01-2015 00:11:44 10  5
14  01-01-2015 00:12:23 20  7.5
15  01-01-2015 00:12:28 2   11.66666667
16  01-01-2015 00:12:37 15  9.25
17  01-01-2015 00:12:42 4   10.4
18  01-01-2015 00:12:48 19  9.333333333
19  01-01-2015 00:13:41 3   11.666667
20  01-01-2015 00:16:04 14  0

我想对具有更大数据集的数据执行此操作,同时还要在单独的列中分别使用最小值和最大值(此处仅显示了平均值函数)。任何帮助将是巨大的。

更新

下面是可复制的代码。

#reproducible code
ts<-  seq(from=ISOdatetime(2015,1,1,0,0,0,tz="GMT"),to=ISOdatetime(2015,1,1,0,0,19,tz="GMT"), by="sec")
set.seed(2)
ts <-ts + seconds(round(runif(20,0,1000),0))
value <- 1:20
avg <- 0
x <- data.table(ts,value,avg)  
setkey(x,ts)
x

解决方案

感谢@Saksham使我努力实现应用功能。这是我想出的解决方案。

find <- function(y){
  mean(x[ts>=y-minutes(2) & ts<y,value])
}
x$avg <- mapply(find,x[,ts])
> x
                     ts value       avg
 1: 2015-01-01 00:00:23     9       NaN
 2: 2015-01-01 00:01:56    11  9.000000
 3: 2015-01-01 00:02:03    18 10.000000
 4: 2015-01-01 00:03:16     1 14.500000
 5: 2015-01-01 00:05:19     6       NaN
 6: 2015-01-01 00:05:54    16  6.000000
 7: 2015-01-01 00:06:27    13 11.000000
 8: 2015-01-01 00:06:50     7 11.666667
 9: 2015-01-01 00:08:41    12  7.000000
10: 2015-01-01 00:09:08    17 12.000000
11: 2015-01-01 00:09:28     8 14.500000
12: 2015-01-01 00:10:56     5 12.500000
13: 2015-01-01 00:11:44    10  5.000000
14: 2015-01-01 00:12:23    20  7.500000
15: 2015-01-01 00:12:28     2 11.666667
16: 2015-01-01 00:12:37    15  9.250000
17: 2015-01-01 00:12:42     4 10.400000
18: 2015-01-01 00:12:48    19  9.333333
19: 2015-01-01 00:13:41     3 11.666667
20: 2015-01-01 00:16:04    14       NaN
萨沙姆

这会做吗

ts[,avg] <- ts[,val] - 0.5

从逻辑上看,看到您的预期结果,它在做相同的事情。如果我误解了,您可以编辑期望的结果以使其更灵活。

编辑:

这种基本的R方法应该可以解决问题。由于我对操纵时间不熟悉,我假设算术的工作方式与大多数语言相同

interval <- minutes(2) #Assuming this is how we define 5 minutes

x$avg <- apply( x, 1, function(y){
               mean(x$value[x$time > ( y["time"]) - interval ) && x$time < y["time"]])
               })

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将2分钟数据转换为15分钟平均值

来自分类Dev

使用T-SQL窗口函数从1分钟数据中检索5分钟平均值

来自分类Dev

Python熊猫-根据数据间隔的长度,平均测量10分钟,得出15分钟平均值和60分钟平均值

来自分类Dev

将15分钟数据更改为R中的每日平均值

来自分类Dev

将15分钟数据更改为R中的每日平均值

来自分类Dev

每五分钟取平均值作为熊猫数据帧中的一个数据点

来自分类Dev

查找过去的4年

来自分类Dev

如何获得每小时平均值(不包括10分钟以上的分钟差异)

来自分类Dev

Bash脚本查找过去24小时内最近修改过的大文件

来自分类Dev

如何在mongodb中查询以查找过去六个月的日期

来自分类Dev

最小,最大,平均值和计数分为15分钟

来自分类Dev

C#数据表:计算列中的平均值

来自分类Dev

查找过去,*不是当前*,登录信息

来自分类Dev

使用LAG()函数查找过去的值

来自分类Dev

Django Query查找过去或将来的最新项目

来自分类Dev

在数据表中查找重叠

来自分类Dev

如何优化此Linq查询,以查找过去24小时内观看次数最多的博客文章

来自分类Dev

如何优化此Linq查询,以查找过去24小时内浏览量最高的博客文章

来自分类Dev

如何自动计算10分钟时间步长中提供的值到1小时时间步长中的平均值?

来自分类Dev

为什么在Linux负载计算中没有使用简单的1/5/15分钟移动平均值?

来自分类Dev

根据过去30天内的平均值对两张表进行排序

来自分类Dev

R:以不规则的1分钟时间序列计算1小时平均值

来自分类Dev

如何转换十进制小时并每5分钟计算一次平均值?

来自分类Dev

在shell脚本中以一个间隔查找持续时间及其在数据集之间的平均值

来自分类Dev

在数据帧时间序列的月度序列中查找给定月份的历史季节性平均值

来自分类Dev

从oracle表中获取最后5分钟的数据

来自分类Dev

查找 HTML 表中行的平均值

来自分类Dev

在2D数组中查找平均值

来自分类Dev

过去1000秒内的值的立即平均值

Related 相关文章

  1. 1

    将2分钟数据转换为15分钟平均值

  2. 2

    使用T-SQL窗口函数从1分钟数据中检索5分钟平均值

  3. 3

    Python熊猫-根据数据间隔的长度,平均测量10分钟,得出15分钟平均值和60分钟平均值

  4. 4

    将15分钟数据更改为R中的每日平均值

  5. 5

    将15分钟数据更改为R中的每日平均值

  6. 6

    每五分钟取平均值作为熊猫数据帧中的一个数据点

  7. 7

    查找过去的4年

  8. 8

    如何获得每小时平均值(不包括10分钟以上的分钟差异)

  9. 9

    Bash脚本查找过去24小时内最近修改过的大文件

  10. 10

    如何在mongodb中查询以查找过去六个月的日期

  11. 11

    最小,最大,平均值和计数分为15分钟

  12. 12

    C#数据表:计算列中的平均值

  13. 13

    查找过去,*不是当前*,登录信息

  14. 14

    使用LAG()函数查找过去的值

  15. 15

    Django Query查找过去或将来的最新项目

  16. 16

    在数据表中查找重叠

  17. 17

    如何优化此Linq查询,以查找过去24小时内观看次数最多的博客文章

  18. 18

    如何优化此Linq查询,以查找过去24小时内浏览量最高的博客文章

  19. 19

    如何自动计算10分钟时间步长中提供的值到1小时时间步长中的平均值?

  20. 20

    为什么在Linux负载计算中没有使用简单的1/5/15分钟移动平均值?

  21. 21

    根据过去30天内的平均值对两张表进行排序

  22. 22

    R:以不规则的1分钟时间序列计算1小时平均值

  23. 23

    如何转换十进制小时并每5分钟计算一次平均值?

  24. 24

    在shell脚本中以一个间隔查找持续时间及其在数据集之间的平均值

  25. 25

    在数据帧时间序列的月度序列中查找给定月份的历史季节性平均值

  26. 26

    从oracle表中获取最后5分钟的数据

  27. 27

    查找 HTML 表中行的平均值

  28. 28

    在2D数组中查找平均值

  29. 29

    过去1000秒内的值的立即平均值

热门标签

归档