【问题标题】:Extract value from previous row based on a condition根据条件从上一行中提取值
【发布时间】:2021-11-16 12:27:22
【问题描述】:

我有一个如下所示的数据集:

data <- tribble(
  ~Date, ~Ticker, ~Close, ~Open,
  "1989-09-11","COND",77.3292,77.3292,
  "1989-09-12","COND",77.4435,77.4435,
  "1989-09-13","COND",76.3118,76.3118,
  "1989-09-14","COND",75.5309,75.6344,
  "1989-09-15","COND",75.6598,75.4675)
# A tibble: 5 x 4
  Date       Ticker Close  Open
  <chr>      <chr>  <dbl> <dbl>
1 1989-09-11 COND    77.3  77.3
2 1989-09-12 COND    77.4  77.4
3 1989-09-13 COND    76.3  76.3
4 1989-09-14 COND    75.5  75.6
5 1989-09-15 COND    75.7  75.5

它的问题是,直到某个日期,收盘价与开盘价相同。我要做的是编写一个函数来检查开盘价和收盘价是否相同,如果是这样,它将开盘价替换为前一行的收盘价。如果应用到上面的数据,它会将数据转换如下:

# A tibble: 5 x 4
  Date       Ticker Close  Open
  <chr>      <chr>  <dbl> <dbl>
1 1989-09-11 COND    77.3  NA
2 1989-09-12 COND    77.4  77.3
3 1989-09-13 COND    76.3  77.4
4 1989-09-14 COND    75.5  75.6
5 1989-09-15 COND    75.7  75.5

我尝试使用 if 语句来执行此操作,但是当我尝试将“关闭”列中上一行的值获取到当前的“打开”值时,我遇到了问题。

【问题讨论】:

    标签: r data-analysis data-cleaning


    【解决方案1】:

    dplyr 中,它是一个简单的mutatelag

    library(dplyr)
    
    data %>%
      mutate(Open = if_else(Open == Close, lag(Close), Open))
    ## A tibble: 5 x 4
    #  Date       Ticker Close  Open
    #  <chr>      <chr>  <dbl> <dbl>
    #1 1989-09-11 COND    77.3  NA  
    #2 1989-09-12 COND    77.4  77.3
    #3 1989-09-13 COND    76.3  77.4
    #4 1989-09-14 COND    75.5  75.6
    #5 1989-09-15 COND    75.7  75.5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-15
      • 2021-05-22
      • 2021-11-28
      • 2012-07-23
      • 2020-01-13
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      相关资源
      最近更新 更多