使用自适应窗口长度计算 data.table 中的滚动平均值

2024-04-21

我希望在具有自适应窗口的 data.table 中按组计算移动平均值,以便在时间序列的开头没有 NA。我知道如何使用 frollmean 并设置adaptive = TRUE 来做到这一点(例如参见 jangorecki 的响应this https://stackoverflow.com/questions/14926572/moving-average-with-varying-time-window-in-r线)。当 data.table 中的所有组的长度相同时,我可以使用相同的代码来工作,但当组的大小不同时,我会遇到错误。

例如,如果我的数据是

tmp = data.table(Gp = c(rep('A',6),rep('B',4)), Val = c(1,3,4,6,2,2,8,5,7,10))

我正在做长度为 3 的移动平均值,那么所需的响应是

> desired_output
    Gp  Val
 1:  A 1.00
 2:  A 2.00
 3:  A 2.67
 4:  A 4.33
 5:  A 4.00
 6:  A 3.33
 7:  B 8.00
 8:  B 6.50
 9:  B 6.67
10:  B 7.33

我尝试了以下方法:

mov_window_len = vector("list",2)
mov_window_len[[1]] = c(1,2,rep(3,4))
mov_window_len[[2]] = c(1,2,rep(3,2))
tmp[,lapply(.SD, frollmean, n = mov_window_len, align = "right", adaptive = TRUE), by = Gp]

但我收到一条错误消息length of integer vector(s) provided as list to 'n' argument must be equal to number of observations provided in 'x'

任何解决此问题的帮助将不胜感激。提前致谢。


您可以使用组索引.GRP子集mov_window_len。这将为您提供每组的正确长度。你只想拿走frollmean of Val,所以不需要lapply.

tmp[, frollmean(Val, n = mov_window_len[.GRP], align = "right", adaptive = TRUE), by = Gp]

#     Gp       V1
#  1:  A 1.000000
#  2:  A 2.000000
#  3:  A 2.666667
#  4:  A 4.333333
#  5:  A 4.000000
#  6:  A 3.333333
#  7:  B 8.000000
#  8:  B 6.500000
#  9:  B 6.666667
# 10:  B 7.333333

或者,可以将窗口长度添加到输入 data.table (Len下面的字段),因为它对应于每一行。

tmp[Gp=="A", Len:=mov_window_len[[1]]
    ][Gp=="B", Len:=mov_window_len[[2]]
     ][, .(Val, Len, RollVal=frollmean(Val, Len, adaptive=TRUE)), by=Gp]
#    Gp Val Len  RollVal
# 1:  A   1   1 1.000000
# 2:  A   3   2 2.000000
# 3:  A   4   3 2.666667
# 4:  A   6   3 4.333333
# 5:  A   2   3 4.000000
# 6:  A   2   3 3.333333
# 7:  B   8   1 8.000000
# 8:  B   5   2 6.500000
# 9:  B   7   3 6.666667
#10:  B  10   3 7.333333
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自适应窗口长度计算 data.table 中的滚动平均值 的相关文章

随机推荐

  • 如何以编程方式从设置中设置默认启动器?

    我想将我的启动器设置为默认启动器 我的代码对很多人来说都可以正常工作 但在乐视设备上却无法正常工作 因为它提供了从默认应用程序设置中设置默认启动器的功能 运行此代码时 它会在默认启动器上移动 但仅在乐视设备中不显示启动器选择器弹出窗口 如何
  • libgdx 中帧缓冲区的结果不明确

    我得到以下奇怪的结果帧缓冲区 http libgdx badlogicgames com nightlies docs api com badlogic gdx graphics glutils FrameBuffer htmllibgdx
  • 二进制到十进制转换 C 代码 - 满足特定测试用例的问题

    C程序将输入的二进制数转换为十进制数 该代码对于输入 10001000 101100 工作正常 输出分别为 136 和 44 但对于以下情况则失败 My code include
  • Cloud Firestore - 动态查询

    我有一个Collection在 Cloud Firestore 中有一定数量的项目 我们称之为Collection X 这个项目数量会不断变化 在任何给定时间 我想听一下此中的项目数Collection并创建几个whereEqualto 调
  • 在 python 中创建接口和可交换实现

    是否可以在 python 中创建一个类接口以及该接口的各种实现 示例 我想创建一个用于 pop3 访问的类 以及所有方法等 如果我使用商业组件 我想将其包装以遵守合同 将来 如果我想使用另一个组件或编写自己的代码 我希望能够交换组件而不是让
  • Jarsigner:找不到证书链

    我已将证书导入到私有证书中 keystore file keytool list Enter keystore password Keystore type JKS Keystore provider SUN Your keystore c
  • 无法安排 azure webjob

    我无法将计划的 WebJob 发布到 Azure 应用服务 我正在使用 Visual Studio 2017 使用此设置一切正常 架构 http schemastore org schemas json webjob publish set
  • 如何设置 Silverlight 4 OOB 应用程序的最小宽度和高度?

    有没有办法为我的 Silverlight 4 浏览器外应用程序设置最小宽度和高度 没有内置设置来控制窗口的最小宽度和高度 因此您需要使用代码来处理它 首先 您的 OOB 应用程序需要具有更高的信任度 然后您需要附加一个处理程序SizeCha
  • 如何在Prolog中编写cmp_list/3函数?

    Write a predicate cmp list 3 the first 2 arguments are 2 lists and the last one is Comparison which means ge lt le or gt
  • 为什么 [CSS 功能] 在 [浏览器] 中不起作用,但在其他浏览器中起作用?

    我尝试使用transition在 Firefox 15 上 它不起作用 即使它可以在其他版本的 Firefox 以及 Chrome 和 Safari 等其他浏览器上运行 当我使用 Firefox 的检查器查看属性时transition被删除
  • 如何禁用 Silverlight DataGrid 验证页脚?

    我面临以下问题 我正在使用验证摘要弹出窗口来在页面上显示错误 并且我有一个可编辑的 DataGrid 所以有2个问题 1 如果 DataGrid 单元格中出现验证错误 则 DataGrid 验证会重复验证错误 例如 DataGrid 包含
  • 使用Rvest登录网站抓取时出现403错误

    我试图在需要登录的网站上抓取页面 但不断收到 403 错误 我已经修改了我网站的这两篇文章中的代码 使用rvest或httr登录网页上的非标准表单 https stackoverflow com questions 28418770 usi
  • 获取 Sublime Text 3 上的所有范围名称

    我正在创建一个插件ST3 http www sublimetext com 并需要所有定义范围的列表 我知道打ctrl alt shift p在状态栏中显示当前范围 但我无法对每个文件扩展名执行此操作 Edit 除了简单的 tmLangua
  • 使用反向路径的 CGContextClip()

    我想在我的作品上剪下图画CGContext但我需要它只是相反 即我想使用添加几个矩形到我的剪切路径CGContextAddRect 并且剪切应该以这样的方式完成 我添加到剪切路径的所有矩形都不受任何绘图操作的影响 通常情况下 情况正好相反
  • 处理 Flask url 创建中的空格

    在我正在开发的 Flask 应用程序中 我使用美国州名作为 url 结构的一部分 州名称是从 python 字典中提取的 该字典将州缩写与其各自的专有名称链接起来 例如 state dict Alabama AL Alaska AK 当状态
  • 使用 Binder 从 Native cpp 应用程序中捆绑 Intent

    我正在尝试从本机 cpp 代码调用意图 基本上 根据我的理解 我必须编写一个 Parcel 来匹配 Frameworks base core java android app ActivityManagerNative java 中的确切反
  • javascript中的指针和数组类[重复]

    这个问题在这里已经有答案了 有什么办法可以通过使用指针来缩短这段代码吗 我需要创建一个与给定数组类 unshift shift push 和 pop 具有基本相同功能但名称不同的类 var makeDeque function var a
  • ui-select 多重选择显示选项的速度非常慢

    我遇到了这个问题 我不知道如何解决 我用过一个ui select 多选 https github com angular ui ui select在我的页面中 首先 向获取数据的 url 发出 http get 请求 然后填充 ui sel
  • 我如何定义已检查整数的列表

    我有一个整数列表定义为List
  • 使用自适应窗口长度计算 data.table 中的滚动平均值

    我希望在具有自适应窗口的 data table 中按组计算移动平均值 以便在时间序列的开头没有 NA 我知道如何使用 frollmean 并设置adaptive TRUE 来做到这一点 例如参见 jangorecki 的响应this htt