根据条件从上一行中提取值

Extract value from previous row based on a condition

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

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 语句来完成它,但是当我尝试从“关闭”列中的前一行获取当前“打开”列中的值时,我 运行 遇到了问题" 值。

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