【问题标题】:When value is negative, subtract result from previous value当值为负时,从前一个值中减去结果
【发布时间】: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))

关于这是否可能的任何想法,如果可能,如何?

谢谢!

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    只需在最后一个mutate上添加一个| neww &lt;0ifelse()函数即可。

    
    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) | neww < 0, 0, neww))
    
    # A tibble: 6 × 3
      date       value  neww
      <date>     <dbl> <dbl>
    1 2022-01-01    18    18
    2 2022-01-02    12     9
    3 2022-01-03    -3     0
    4 2022-01-04    -4     0
    5 2022-01-05     5     3
    6 2022-01-06    -2     0
    

    【讨论】:

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