首页 > 解决方案 > 将连续行中的差异除以中间的 NA 行数,然后将分数重新分配给 NA 行。R dplyr() 变异() 滞后()

问题描述

使用 dplyr() lag() 函数,我发现连续行之间“x”的差异。对于在“x”中有 NA 的行,“diff”为 NA。对于下一个“差异”,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 行之后的“差异”除以 1 +“跳过”的 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

标签: rdplyrnalag

解决方案


你可以na.approx从包中使用zoo

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.frameNA开头的 。


推荐阅读