有条件地替换单行中的值或将后续行的值替换为 R 中上一个行组的值

Conditionally replace value in a single row or replace value of following rows with values from previous row group in R

我有一个包含超过 20'000 行的巨大数据表,每个时间点 t 和每个具有 id 的客户都有一列,我正在寻找一种方法来替换 y 中的值,每个 t=5:8通过在 t=3&4.

复制粘贴 y 的值

下面的数据集是我的数据集的缩略版:

Dt=data.table(
t=rep(1:8, times=3),
y=c(0,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0),
id=rep(1:3, each=8))

   t y id
 1: 1 0  1
 2: 2 1  1
 3: 3 0  1
 4: 4 0  1
 5: 5 0  1
 6: 6 1  1
 7: 7 1  1
 8: 8 0  1
 9: 1 0  2
10: 2 0  2
11: 3 0  2
12: 4 1  2
13: 5 0  2
14: 6 0  2
15: 7 1  2
16: 8 0  2
17: 1 0  3
18: 2 1  3
19: 3 1  3
20: 4 1  3
21: 5 0  3
22: 6 1  3
23: 7 0  3
24: 8 0  3

最后应该是这样的:

    t y id
 1: 1 0  1
 2: 2 1  1
 3: 3 0  1
 4: 4 0  1
 5: 5 0  1
 6: 6 0  1
 7: 7 0  1
 8: 8 0  1
 9: 1 0  2
10: 2 0  2
11: 3 0  2
12: 4 1  2
13: 5 0  2
14: 6 1  2
15: 7 0  2
16: 8 1  2
17: 1 0  3
18: 2 1  3
19: 3 1  3
20: 4 1  3
21: 5 1  3
22: 6 1  3
23: 7 1  3
24: 8 1  3

您是否知道我该如何解决这个问题?我想用 t 和客户 ID 的范围做 2 个 for 循环,但我想对于这个数据集,它会花费太长时间。 提前致谢!

您的数据与 post 中显示的内容不完全匹配(特别是 t 为 3 和 id 3 中的 4 的行)。您可以使用以下方法尝试 replace,但不确定使用 :=.

生成副本的效率如何
library(data.table)

Dt[ , y := replace(y, t %in% 5:8, y[t %in% 3:4]), by = id]
Dt

输出

    t y id
 1: 1 0  1
 2: 2 1  1
 3: 3 0  1
 4: 4 0  1
 5: 5 0  1
 6: 6 0  1
 7: 7 0  1
 8: 8 0  1
 9: 1 0  2
10: 2 0  2
11: 3 0  2
12: 4 1  2
13: 5 0  2
14: 6 1  2
15: 7 0  2
16: 8 1  2
17: 1 0  3
18: 2 1  3
19: 3 0  3
20: 4 0  3
21: 5 0  3
22: 6 0  3
23: 7 0  3
24: 8 0  3
    t y id