如何根据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
我有以下数据集:
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