在由R中的分类变量定义的时间窗口上计算出的平均列数

问题描述 投票:0回答:2

我有一个看起来像这样的数据框:

structure(list(week  = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
               freq  = c(0, 4.34, 1.24, 0, 5.26, 0, 7.12, 3.70, 0, 0), 
               event = c(0, 0, 0, 0, 0, 0, 1, 0, 0, 0)), 
          row.names = c(NA, -10L), 
          class = c("tbl_df", "tbl", "data.frame"))

我需要做的是创建一个新列,对应于event = 1,该列计算在前几周的2-4和-4之间的窗口的平均频率,由可变周确定。例如,由于事件= 1在第7周,我想对第2、3、4和5周的平均频率进行计算。每次事件等于1时都必须重复一次。该平均值应在新列中报告在event = 1的行中。

类似地,我将需要生成另一列,其均值是窗口-1;对于事件= 1,为+2,因此在本例中为6至9周。

最终结果应如下所示:

week    freq    event     mean1     mean2
1       0       0         NA        NA
2       4.34    0         NA        NA
...
7       7.12    1         2.71      2.705
...

[如果能帮助我,我会很感激,我已经阅读了几个类似的主题,但是我找不到解决这个特定问题的方法。

我有一个看起来像这样的数据帧:structure(list(week = c(1、2、3、4、5、6、7、8、9、10),freq = c(0、4.34、1.24 ,0,5.26,0,7.12,3.70,0,0),事件= c(0,...

r dataframe moving-average
2个回答
0
投票

您的问题有两个问题。您的dput无法正常工作,因此我已对其进行了修复。其次,您说您想制定一个从-4周到-2周的窗口。那将是第3、4和5周,而不是第2、3、4和5周。对于这个示例,我假设您的意思是-5至-2周,尽管这很容易更改,如您所见。

以下功能将允许您在frequency列中指定窗口的相对开始和停止位置。可以使此功能更加简洁和高效,但是我尝试以一种使逻辑更易于遵循的方式编写它:


0
投票

这里是一个data.table解决方案,假设我已正确理解您:

© www.soinside.com 2019 - 2024. All rights reserved.