如何根据R中的条件计算行的差异

How to calculate difference of rows based on conditions in R

我有以下数据集:

value  group1  group2   x
1        0       0      NA
2        0       0      NA
7        0       1      2.5
5        1       0      NA
8        1       0      NA
4        1       0      NA
6        0       1      1.5
3        1       0      NA
2        1       0      NA

现在我想计算一个 y 列,其中如果组 1 = 0 则 y = 0,如果组 1 = 1 则 y = 值 -(x 的最后一个值不是 NA)。因此它应该如下所示:

value  group1  group2   x       y
1        0       0      NA      0
2        0       0      NA      0
7        0       1      2.5     0
5        1       0      NA      2.5
8        1       0      NA      5.5
4        1       0      NA      1.5
6        0       1      1.5     0
3        1       0      NA      1.5
2        1       0      NA      0.5

如果有任何帮助,我将不胜感激。非常感谢!

使用zoo::na.locf0-

transform(df, y = ifelse(group1 == 0, 0, value - zoo::na.locf0(x)))

#  value group1 group2   x   y
#1     1      0      0  NA 0.0
#2     2      0      0  NA 0.0
#3     7      0      1 2.5 0.0
#4     5      1      0  NA 2.5
#5     8      1      0  NA 5.5
#6     4      1      0  NA 1.5
#7     6      0      1 1.5 0.0
#8     3      1      0  NA 1.5
#9     2      1      0  NA 0.5