【发布时间】:2022-12-13 09:01:01
【问题描述】:
我有一个逻辑上不应该有任何负值的数据集,但由于对数据的修改,它有时会。为此,我想将负值分配给前一天的数据。
例如,我希望值像这样改变:
| Old | New |
|---|---|
| 18 | 18 |
| 12 | 5 |
| -3 | 0 |
| -4 | 0 |
| 5 | 3 |
| -2 | 0 |
我试图在 R 中以编程方式执行此操作,但无法使其工作。
这是我最近的尝试,有点管用,但只是部分有效,而且感觉不稳定:
library(tidyverse)
library(lubridate)
# Data
nums <- as_tibble(list(
value = c(18, 12, -3, -4, 5, -2),
date = c("2022-01-01","2022-01-02","2022-01-03",
"2022-01-04","2022-01-05","2022-01-06"))) |>
mutate(date = ymd(date)) |>
select(date,value)
# Remove negatives
no_negs <- nums |>
arrange(desc(date)) |>
mutate(neww = if_else(lag(value,1) < 0, value + lag(value,1),value)) |>
arrange(date) |>
mutate(neww = ifelse(is.na(neww), 0, neww))
关于这是否可能的任何想法,如果可能,如何?
谢谢!
【问题讨论】: