日期前固定数量观察的滚动窗口 - 但不是滚动日期窗口

问题描述

试图通过在数据表中创建一个数据窗口来运行许多简单的函数,但在混合固定数量的有序观察和移动日期时挣扎 - 不要与滚动日期范围内的任何数量的观察相混淆,大多数问题似乎都与哪些有关。

我们需要在当前观察日期之前按名称分组的最后 30 个观察结果,这可能发生在不同的天数内。

所以吉米、约翰和苏珊去年都在练习 tiddlywink。

我们想知道他们每个人在过去 30 次尝试(或投篮)中成功投进底池的次数,例如过去 30 次尝试的滚动平均值。但是,这 30 次尝试都应该在它们翻转的当前日期之前,因此我们要排除今天进行的任何投篮。

因此一个名为 Tiddlywinks 的数据表可以记录每个镜头,观察:

玩家(玩家的名字) DateTime(每次翻转的时间和日期,因此排序为我们提供了翻转的顺序) 日期(每次翻转的日期,因此我们可以按当前日期滞后所有观察结果) 成功(1 或 0,1 表示成功翻入底池)

我可以创建滚动计数并因此按日期计算平均值,没问题,并且发现 R runner 包在这方面很有用,但它似乎只启用滚动日期窗口或序列,但不能混合使用。例如。如果要计算每个玩家在当前日期之前的过去 30 天内成功的次数,我们可以说:

library(data.table) 
library(runner)

dataset[order(DateTime),rolling_wins_30 := sum_run(
  x = Success,k = 30,idx = as.Date(Date),lag=1
),by=Player][is.na(rolling_wins_30),rolling_wins_30 := 0]

但我们不想这样做。我们想知道(例如)在当前日期(因此不包括当前日期)进行任何尝试之前,玩家在过去 30 次尝试中(因此严格顺序为 30 次观察的滚动窗口)获得了多少成功。所有玩家的练习量各不相同,因此需要一个基于翻转(即观察,而不是日期)的滚动窗口,但仍然需要按时间顺序排列,并且仍然需要排除当天的所有翻转.

如果我们想评估今天参加比赛的所有球员的当前状态,但基于他们在今天之前的最后 30 次翻转,这将非常有用。

找不到任何可以解决固定滚动观察窗口问题的任何内容,所有这些都在某个日期之前。

想法?

解决方法

无需将 klag 应用于不同的索引,您始终可以计算 30 个元素的总和/平均值并滞后一天

library(data.table) 
library(runner)

dataset[
  order(DateTime),rolling_wins_30 := lag_run(
    sum_run(x = Success,k = 30),lag = 1,idx = as.Date(Date)
  ),by = Player
][is.na(rolling_wins_30),rolling_wins_30 := 0]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...