我正在寻找对数据表中由 2 列表示的两个时间序列进行一些相关性工作。我基本上需要能够在一列上运行rollapply,并能够使用rollapply的当前位置访问被调用函数中的另一列。
让我们考虑以下数据表:
> DT = data.table(y=c(1,3,6), v=1:9)
> DT
y v
1: 1 1
2: 3 2
3: 6 3
4: 1 4
5: 3 5
6: 6 6
7: 1 7
8: 3 8
9: 6 9
> ft=function(x) if( mean( x[,2,with=FALSE] ) == 4.5) r=c(r,mean(DT[INDEX:(INDEX+3), mean(v)]) )
> rollapply(DT, width=2, function(x) r=mean(x))
结果向量r
将是因为当 rollapply 在第 2、5 和 8 行时2 5
条件为真(但在第 8 行下方没有 3 行,因此您无法获得它们的平均值)。mean( x[,2,with=FALSE] ) == 4.5)
> r
[1] 2 5
INDEX
是 rollapply 从可数据 DT 中提取长度为 2 的向量以将其提供给函数 ft 的当前行。
我不知道是否有可能这样做,因为它可能会破坏整个应用程序的工作方式。