我正在进行一些楔入式分析,并且想要一种方法来计算相邻时间段之间的差异统计量。我想出了一些适用于我的玩具示例的东西,但是有人知道从输入DT到所需输出DT的更有效方法吗?
type RemoveCommonParam<T extends {}> = {
[TKey in keyof T]:
T[TKey] extends (commonParam: string, ...args: infer TArgs) => unknown
? (...args: TArgs) => void
: T[TKey];
}
答案 0 :(得分:2)
1)一种可能的方法是使用非等额联接:
inputDT[, s:=step]
inputDT[
desiredOutputDT,
on=.(group=group2, s>=step1, s<=step2), nomatch=0L, allow.cartesian=TRUE,
.(stat=statistic(
independence_test(val ~ step, .SD))[1L]),
by=.EACHI]
2)另一种方法是分别加入步骤1和步骤2,重新整理表并执行计算:
desiredOutputDT[, c("s1", "s2") := .(step1, step2)]
rbindlist(list(
inputDT[desiredOutputDT, on=.(group=group2, step=step1)],
inputDT[desiredOutputDT, on=.(group=group2, step=step2)]))[,
.(stat=statistic(independence_test(val ~ step, .SD))),
by=.(group, s1, s2)]
您还可以使用
创建desiredOutputDT
desiredOutputDT <- inputDT[, CJ(group2=group, step1=seq(max(step)-1L), unique=TRUE)][,
step2 := step1 + 1L]