将连续行中的差异除以中间的 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