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
在 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