使用r中长格式data.table的两个变量按条件改变变量

mutate variable by condition using two variables in long format data.table in r

在此data.table:

dt <- data.table(id=c(1,1,1,2,2,2), time=rep(1:3,2), x=c(1,0,0,0,1,0))
dt
   id time x
1:  1    1 1
2:  1    2 0
3:  1    3 0
4:  2    1 0
5:  2    2 1
6:  2    3 0

我需要以下内容:

   id time x
1:  1    1 1
2:  1    2 1
3:  1    3 1
4:  2    1 0
5:  2    2 1
6:  2    3 1

  1. if x==1 at time==1 then x=1 at times 2 and 3, by id
  2. if x==1 at time==2 then x=1 at time 3, by id

对于第一点(我想第二点也差不多),我已经尝试过我之前发布的类似问题中提到的方法( and ),但是none有效:

在宽格式下使用 data.table 会容易得多,但我在长格式下一直面临这种问题,我不想一直重塑我的数据

谢谢!

编辑:

@GregorThomas 提供的答案 dt[, x := cummax(x), by = id] 适用于我提出的问题。

现在我对一个字符变量问同样的问题:

dt2 <- data.table(id=c(1,1,1,2,2,2), time=rep(1:3,2), x=c('a','b','b','b','a','b'))
dt2
   id time x
1:  1    1 a
2:  1    2 b
3:  1    3 b
4:  2    1 b
5:  2    2 a
6:  2    3 b

在上面的table中,如何做到以下几点:

  1. if x=='a' at time==1 then x='a' at times 2 and 3, by id
  2. if x=='a' at time==2 then x='a' at time 3, by id

使用累积最大值函数cummax:

dt[, x := cummax(x), by = id]
dt
# id time x
# 1:  1    1 1
# 2:  1    2 1
# 3:  1    3 1
# 4:  2    1 0
# 5:  2    2 1
# 6:  2    3 1