【问题标题】:Divide difference in consecutive rows by number of NA rows in between and reassign fraction to NA rows. R dplyr() mutate() lag()将连续行中的差异除以中间的 NA 行数,然后将分数重新分配给 NA 行。 R dplyr() 变异() 滞后()
【发布时间】:2021-09-28 08:09:03
【问题描述】:

使用 dplyr() lag() 函数,我发现了连续行之间“x”的差异。 对于在“x”中有 NA 的行,“diff”为 NA。对于下一个“差异”,NA 行似乎被排除在计算之外:

df  %>%
  mutate(diff = x - lag(x))
date x diff
2021-01-01 0 0
2021-01-02 10 10
2021-01-02 30 20
2021-01-03 NA NA
2021-01-04 60 30

为了获得更完整的数据集,我假设在两个条目之间,当有 NA 条目时,“x”会线性增加。

所以,我想将 NA 行后面的“差异”除以 1 +“跳过”的 NA 行数。在此示例中,跳过了 1 个 NA 行,因此我想除以 30/2 并在 NA 行和下一行的 diff 列中输入 15,如下所示。

date x diff
2021-01-01 0 0
2021-01-02 10 10
2021-01-02 30 20
2021-01-03 NA 15
2021-01-04 60 15

【问题讨论】:

  • 我得到一个不同的diff 列,其中包含“我的”dplyr-functions:c(NA, 10, 20, NA, NA)

标签: r dplyr na lag


【解决方案1】:

你可以使用包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

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多