r 根据值(不是行数或日期/时间变量)计算滚动平均值

2023-11-27

我对 R 中用于计算滚动平均值的所有软件包都很陌生,我希望你能给我指明正确的方向。

我有以下数据作为示例:

ms <- c(300, 300, 300, 301, 303, 305, 305, 306, 308, 310, 310, 311, 312,
    314, 315, 315, 316, 316, 316, 317, 318, 320, 320, 321, 322, 324,
    328, 329, 330, 330, 330, 332, 332, 334, 334, 335, 335, 336, 336,
    337, 338, 338, 338, 340, 340, 341, 342, 342, 342, 342)
correct <- c(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,
         1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1,
         1, 0, 0, 1, 0, 0, 1, 1, 0, 0)
df <- data.frame(ms, correct)

ms是以毫秒为单位的时间点,correct是特定动作是否正确执行
(1 = 正确,0 = 不正确)。

我现在的目标是计算指定毫秒数窗口内的正确百分比(或平均值)。正如您所看到的,某些时间点缺失,某些时间点出现多次。因此,我不想根据行号进行过滤。我研究了一些软件包,例如“tidyquant”,但在我看来,这些类型的软件包需要时间/日期变量而不是数值变量来确定平均值的窗口。有没有办法指定窗口上的数值df$ms?


为了完整起见,这里是一个使用的答案数据表 to 非等值连接中的聚合.

OP 已澄清comments,他正在寻找 5 ms 的滑动窗口,即300-304、301-305、302-306 等窗口.

由于OP的数据集中没有302 ms的数据点,因此需要填充缺失值。

library(data.table)
ws <- 5   # define window size
setDT(df)[SJ(start = seq(min(ms), max(ms), 1))[, end := start + ws - 1], 
          on = .(ms >= start, ms <= end),
          .(share_correct = mean(correct)), by = .EACHI]
     ms  ms share_correct
 1: 300 304     0.4000000
 2: 301 305     0.0000000
 3: 302 306     0.2500000
 4: 303 307     0.2500000
 5: 304 308     0.2500000
 6: 305 309     0.2500000
 7: 306 310     0.2500000
 8: 307 311     0.0000000
 9: 308 312     0.2000000
10: 309 313     0.2500000
11: 310 314     0.2000000
12: 311 315     0.4000000
13: 312 316     0.4285714
14: 313 317     0.2857143
15: 314 318     0.3750000
16: 315 319     0.4285714
17: 316 320     0.4285714
18: 317 321     0.4000000
19: 318 322     0.4000000
20: 319 323     0.2500000
21: 320 324     0.4000000
22: 321 325     0.3333333
23: 322 326     0.5000000
24: 323 327     1.0000000
25: 324 328     1.0000000
26: 325 329     0.5000000
27: 326 330     0.2000000
28: 327 331     0.2000000
29: 328 332     0.4285714
30: 329 333     0.3333333
31: 330 334     0.2857143
32: 331 335     0.5000000
33: 332 336     0.3750000
34: 333 337     0.2857143
35: 334 338     0.3000000
36: 335 339     0.3750000
37: 336 340     0.3750000
38: 337 341     0.4285714
39: 338 342     0.4000000
40: 339 343     0.4285714
41: 340 344     0.4285714
42: 341 345     0.4000000
43: 342 346     0.5000000
     ms  ms share_correct

如果 OP 仅对数据集中存在起点的窗口感兴趣,则可以简化代码:

setDT(df)[SJ(start = unique(ms))[, end := start + ws - 1], 
          on = .(ms >= start, ms <= end),
          .(share_correct = mean(correct)), by = .EACHI]
     ms  ms share_correct
 1: 300 304     0.4000000
 2: 301 305     0.0000000
 3: 303 307     0.2500000
 4: 305 309     0.2500000
 5: 306 310     0.2500000
 6: 308 312     0.2000000
 7: 310 314     0.2000000
 8: 311 315     0.4000000
 9: 312 316     0.4285714
10: 314 318     0.3750000
11: 315 319     0.4285714
12: 316 320     0.4285714
13: 317 321     0.4000000
14: 318 322     0.4000000
15: 320 324     0.4000000
16: 321 325     0.3333333
17: 322 326     0.5000000
18: 324 328     1.0000000
19: 328 332     0.4285714
20: 329 333     0.3333333
21: 330 334     0.2857143
22: 332 336     0.3750000
23: 334 338     0.3000000
24: 335 339     0.3750000
25: 336 340     0.3750000
26: 337 341     0.4285714
27: 338 342     0.4000000
28: 340 344     0.4285714
29: 341 345     0.4000000
30: 342 346     0.5000000
     ms  ms share_correct

在这两种情况下,包含间隔的 data.table[start, end]是动态创建的并正确连接到df。在此期间非等值连接,中间结果立即按连接参数分组(by = .EACHI) 并汇总。注意闭区间习惯上符合OP的预期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

r 根据值(不是行数或日期/时间变量)计算滚动平均值 的相关文章

  • 从组成员数据创建加权图

    假设我有一个 R 数据集 指示组内的个体 这是一个例子 grp lt c 1 1 1 2 2 2 2 3 3 3 4 4 4 5 5 ind lt c A C D B C D E A D E B F E A F data frame grp
  • 如何根据R中的条件创建新变量

    我正在尝试根据某些条件创建一个新变量 我的数据看起来像 a b 1 NA 2 3 3 3 NA 2 NA NA 我想要的是一个变量c这样 when a is not NA b is NA c a when a is NA b is not
  • 将不规则时间序列拆分为规则月平均值 - R

    为了确定季节性对能源使用的影响 我需要将计费数据库中的能源使用信息与每月温度进行调整 我正在使用一个计费数据集 其中包含不同长度以及开始日期和结束日期的账单 并且我希望获得每个月内每个帐户的月平均值 例如 我有一个计费数据库 具有以下特征
  • 如何从包含 htmlwidget 的 rmarkdown 文件生成 md 文件

    我正在用这个 rmd 创建一个 html 文件 title test author me date r Sys Date output html document r data HairEyeColor rpivotTable rpivot
  • 为什么连接终止

    我正在尝试使用随机森林分类模型H2OR 内部的库 训练集有 7000 万行和 25 个数字特征 总文件大小为 5 6 GB 验证文件的大小为 1 GB 我的系统有 16 GB RAM 和 8 核 CPU 系统成功读取 H2O 对象中的两个文
  • R ggplot2 比例 alpha 离散以显示在图例中

    我正在尝试绘制两个因素 压力和性别 的图 并使用 alpha 值来传达性别 这是我的代码和结果图 ggplot subset df zfish data overall long day day 01 measure distance fr
  • 在 expr *之前*执行的任务处理程序

    是否有运行代码的回调before提示输入expr被评价 通过 SO CRAN 和一些谷歌搜索发现了我怀疑的答案 当前的 REPL 实现不可能 如果我错过了类似详细的重复讨论 我深表歉意 我对addTaskCallback 及其函数族 正在阅
  • 如何在R中对多个时间序列应用dtw算法?

    Problem 我有不同车辆速度的时间序列 我的最终目标是根据不同车辆在时间上的速度相似性对它们进行聚类 因此 我基本上需要生成一个距离矩阵 其中每个单元格包含一对车辆速度时间序列之间的距离 我想使用动态时间扭曲 dtw 作为距离度量 所以
  • 润滑mdy功能

    我正在尝试转换以下内容 但对其中一个日期 1 没有成功 4 2 10 变为 0010 04 02 有办法纠正这个问题吗 谢谢 维韦克 data lt data frame initialDiagnose c 4 2 10 14 01 200
  • 是否有任何 R 函数可以将链接的值可视化为节点内的文本?

    我正在使用 R 包networkD3绘制以下桑基图 这些值设置链接的大小 我需要一个在节点内添加与文本相同的值的函数 Library library networkD3 library dplyr Make a connection dat
  • R 脚本 - 如何在错误时继续执行代码

    我编写了一个 R 脚本 其中包含一个检索外部 Web 数据的循环 数据的格式大多数时候是相同的 但有时格式会以不可预测的方式发生变化 并且我的循环崩溃 停止运行 有没有办法不管错误如何继续执行代码 我正在寻找类似于 VBA 中的 On er
  • 如何计算大型数据集的平均值

    我正在使用一个数据集 该数据集每天 24 小时每小时读取一次温度读数 已有 100 多年的历史 我想获得每天的平均温度以减少数据集的大小 标题看起来像这样 YR MO DA HR MN TEMP 1943 6 19 10 0 73 1943
  • R数据表:如何找到特定单元格正下方的未知数量的空单元格并用编号字符串填充它们

    我知道如何找到空的cells in a data table一般来说 但这有点棘手 我还没有完全弄清楚如何管理它 可以说我有一个data table其中在df 2 1 包含我需要定位的关键字字符串 智能触发 在这种情况下 仪器用户使用的智能
  • 有没有办法在 R Shiny 应用程序加载时自动验证对 GoogleSheets 的访问? Googlesheets4 身份验证问题

    我目前正在使用 R Shiny 应用程序 它利用 googlesheets4 从 GoogleSheet 读取数据 我认识到身份验证对于访问 GoogleSheets 很重要 因此我尝试使用 app R 文件中的以下代码对应用程序进行身份验
  • 从数据框中的列中删除小数

    我有一个数据框 列中有数字 这些数字是小数 我想删除列中的小数和整数 我的数据框expsrs看起来像这样 ENSG00000226823 1 15 14 4947 22 5606 13 5819 5 09327 16 8503 ENSG00
  • 使用 mutate_if 和 Replace_na 替换数字列上的 NA

    我想使用某些变体替换数字列中的 NAmutate if and replace na如果可能的话 但无法弄清楚语法 df lt tibble first c a NA b second c NA 2 NA third c 10 NA NA
  • kableExtra:垂直对齐在多列 PDF 输出中不起作用

    我想将 kableExtra 表中的所有列对齐到顶部 这valign top 选项似乎并不能解决这里的问题 此外 由于某种原因 第三列不知何故被放在第二列之上 并且引用也不起作用 下面的MWE是基于这个相关的SO问题 它只需要2列 kabl
  • jQuery 选择和过滤 div 内的元素

    我在选择和过滤 div 内的元素时遇到问题 HTML div div
  • prop.test 使用什么公式?

    The prop test函数显然没有使用给定的公式here https onlinecourses science psu edu stat200 node 48创建置信区间 那么使用什么公式 下面是一个置信区间CI使用 prop tes
  • 螺旋环绕文本

    我看到在LaTeX 人们将文本包装成螺旋状 https tex stackexchange com questions 88751 text spirals with tikz如下所示 我想在 R 中复制这个 我虽然plotrix s ar

随机推荐