如何创建一个新变量,它是另一个二进制变量的条件累积和?

met*_*krn 1 conditional r cumsum

我正在清理一些眼动追踪数据,正如预期的那样,它是凌乱的.我坚持一个初步的步骤,我会尽力描述.解决方案可能非常简单.

我有两个变量,一个是二元(x1),另一个是连续的(x2),例如:

dat <- data.frame(x1 = c(0,1,1,0,1,1,1,0,1,1), 
                  x2 = c(22,23,44,25,36,37,28,19,30,41))
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新的变量(x3),它是x2的累积和,适用于x1等于1的连续情况.最终产品看起来像这样:

dat <- data.frame(x1 = c(0,1,1,0,1,1,1,0,1,1), 
                  x2 = c(22,23,44,25,36,37,28,19,30,41), 
                  x3 = c(0, 23, 67, 0, 36, 73, 101, 0, 30, 71))
Run Code Online (Sandbox Code Playgroud)

换句话说,这是一个cumsum()x2每个0后"复位" x1.

Psi*_*dom 5

dat$x3 <- with(dat, ave(replace(x2, x1 == 0, 0), cumsum(x1 == 0), FUN=cumsum))

dat
#   x1 x2  x3
#1   0 22   0
#2   1 23  23
#3   1 44  67
#4   0 25   0
#5   1 36  36
#6   1 37  73
#7   1 28 101
#8   0 19   0
#9   1 30  30
#10  1 41  71
Run Code Online (Sandbox Code Playgroud)

  • 或变化:`transform(dat,x3 = ave(x2*x1,cumsum(x1 == 0),FUN = cumsum)) (2认同)