R:通过减去 2 行创建新列,但前提是一行中的 2 行具有值

R: Create new column by subtracting 2 lines but only if 2 lines in a row have values

在 R 中,我有一个来自 csv 的数据框,在 A 列中包含不同的值。 我想通过从 A[=21= 中的下一行减去 A 中的同一行来创建一个新列 B ], 但只有当有 2 个连续值 ≠ 0

最好用一个例子来解释:

A    B    explanation
_    _    ___________
0    0    0, because A = 0
1    1    2-1
2    1    3-2
3    0    0, because next line in A = 0
0    0    0, because A = 0
4    0    0, because next line in A = 0
0    0    0, because A = 0
3   -1    2-3
...  ...  ...
2    0    0, because it is the last value in the df

我没有找到任何解决方案,因为有不同的例外情况。 谢谢!

我会使用 dplyr 计算所有值,并检查是否满足条件。

library(dplyr)

df <- 
df %>%
  mutate(
    B = lead(A) - A,
    is_zero = (A == 0) | (lead(A) == 0)
  )

然后把符合条件的全部归零。我认为这比使用 ifelse.

快一点
df$B[df$is_zero] <- 0

给你:

> select(df, -is_zero)
  A  B
1 0  0
2 1  1
3 2  1
4 3  0
5 0  0
6 4  0
7 0  0
8 3 NA