将连续行中的差异除以中间的 NA 行数,并将分数重新分配给 NA 行。 R dplyr() 变异() 滞后()
Divide difference in consecutive rows by number of NA rows in between and reassign fraction to NA rows. R dplyr() mutate() lag()
使用 dplyr() lag() 函数,我发现连续行之间 'x' 的差异。
对于 'x' 中具有 NA 的行,'diff' 是 NA。对于下一个 'diff' NA 行似乎被排除在计算之外:
df %>%
mutate(diff = x - lag(x))
日期
x
差异
2021-01-01
0
0
2021-01-02
10
10
2021-01-02
30
20
2021-01-03
不适用
不适用
2021-01-04
60
30
为了获得更完整的数据集,我假设在两个条目之间存在 NA 条目时 'x' 线性增加。
所以,我想将 NA 行后面的 'diff' 除以 1 + 'skipped' 的 NA 行数。在此示例中,跳过了 1 个 NA 行,因此我想除以 30/2 并在 NA 行和下一行的 diff 列中输入 15,如此处所示。
日期
x
差异
2021-01-01
0
0
2021-01-02
10
10
2021-01-02
30
20
2021-01-03
不适用
15
2021-01-04
60
15
您可以使用包 zoo
中的 na.approx
:
library(dplyr)
library(zoo)
df %>%
mutate(diff = na.approx(x) - lag(na.approx(x)))
这给了你
# A tibble: 5 x 3
date x diff
<date> <dbl> <dbl>
1 2021-01-01 0 NA
2 2021-01-02 10 10
3 2021-01-02 30 20
4 2021-01-03 NA 15
5 2021-01-04 60 15
使用 lag(x, default = 0)
,您可以处理 data.frame 开头的 NA
。
使用 dplyr() lag() 函数,我发现连续行之间 'x' 的差异。 对于 'x' 中具有 NA 的行,'diff' 是 NA。对于下一个 'diff' NA 行似乎被排除在计算之外:
df %>%
mutate(diff = x - lag(x))
日期 | x | 差异 |
---|---|---|
2021-01-01 | 0 | 0 |
2021-01-02 | 10 | 10 |
2021-01-02 | 30 | 20 |
2021-01-03 | 不适用 | 不适用 |
2021-01-04 | 60 | 30 |
为了获得更完整的数据集,我假设在两个条目之间存在 NA 条目时 'x' 线性增加。
所以,我想将 NA 行后面的 'diff' 除以 1 + 'skipped' 的 NA 行数。在此示例中,跳过了 1 个 NA 行,因此我想除以 30/2 并在 NA 行和下一行的 diff 列中输入 15,如此处所示。
日期 | x | 差异 |
---|---|---|
2021-01-01 | 0 | 0 |
2021-01-02 | 10 | 10 |
2021-01-02 | 30 | 20 |
2021-01-03 | 不适用 | 15 |
2021-01-04 | 60 | 15 |
您可以使用包 zoo
中的 na.approx
:
library(dplyr)
library(zoo)
df %>%
mutate(diff = na.approx(x) - lag(na.approx(x)))
这给了你
# A tibble: 5 x 3
date x diff
<date> <dbl> <dbl>
1 2021-01-01 0 NA
2 2021-01-02 10 10
3 2021-01-02 30 20
4 2021-01-03 NA 15
5 2021-01-04 60 15
使用 lag(x, default = 0)
,您可以处理 data.frame 开头的 NA
。