获取特定行滞后值的简单方法

Simple way to get lagged value of a specific row

我想创建一个名为 lag_diff3 的栏目。此列由A = 2003中的滞后值之差构成。我可以使用下面的代码来做到这一点,但它看起来很难看。我可以用简单的方法重写这个问题吗

A = c("2001", "2002", "2003", "2004")
B = c(10, 20, 60, 70)
dat = tibble(A = A, B = B) %>%
    mutate(lag_diff1 = B - lag(B, 1),
           lag_diff2 = ifelse(A != "2003", -100, lag_diff1),
           lag_diff3 = max(lag_diff2)) 
> dat 
# A tibble: 4 × 5
  A         B lag_diff1 lag_diff2 lag_diff3
  <chr> <dbl>     <dbl>     <dbl>     <dbl>
1 2001     10        NA      -100        40
2 2002     20        10      -100        40
3 2003     60        40        40        40
4 2004     70        10      -100        40

你可以做到 lag_diff1[A == "2003"]:

library(dplyr)

A = c("2001", "2002", "2003", "2004")
B = c(10, 20, 60, 70)
tibble(A = A, B = B) %>%
  mutate(lag_diff1 = B - lag(B, 1),
         lag_diff3 = lag_diff1[A == "2003"]) 
#> # A tibble: 4 × 4
#>   A         B lag_diff1 lag_diff3
#>   <chr> <dbl>     <dbl>     <dbl>
#> 1 2001     10        NA        40
#> 2 2002     20        10        40
#> 3 2003     60        40        40
#> 4 2004     70        10        40