我有一个看起来像这样的数据框:
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,...
您的问题有两个问题。您的dput
无法正常工作,因此我已对其进行了修复。其次,您说您想制定一个从-4周到-2周的窗口。那将是第3、4和5周,而不是第2、3、4和5周。对于这个示例,我假设您的意思是-5至-2周,尽管这很容易更改,如您所见。
以下功能将允许您在frequency
列中指定窗口的相对开始和停止位置。可以使此功能更加简洁和高效,但是我尝试以一种使逻辑更易于遵循的方式编写它:
这里是一个data.table
解决方案,假设我已正确理解您: