r - 将连续行中的差异除以中间的 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 |
解决方案
你可以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
开头的 。
推荐阅读
- python-3.x - GNS3 2.2.23 win10上运行python 3.9.6的安装问题?
- python - cv2 安装成功后无法导入
- postgresql - 优化 postgres 查询以拉取唯一用户的前 5 条记录
- list - Flutter imagePicker 到 Uint8list
- reactjs - 有没有办法在不阅读文档或代码的情况下获取组件中使用的道具列表?
- javascript - Stripe 付款后将 Vuex 数据传递给 Firebase
- cloudflare - Cloudflare Worker 请求上下文中的 CPU 时间和 Wall time 是什么?
- javascript - reactjs 状态没有通过使用 useState 钩子单击按钮来更新
- excel - 如何索引和匹配第二个匹配值
- reactjs - React:如何将 MediaStreamTrack 附加到 Video 元素?