I have df with ID, X1 and wish to create WANT, which adds ‘3’ to the next value when X1 == NA.
library(dplyr)
df <-
tibble(
ID = c(1, 1, 1, 1, 2, 2, 3, 3, 3),
X1 = c(5, NA, 11, NA, 7, NA, 4, 7, 10),
WANT = c(5, 8, 11, 14, 7, 10, 4, 7, 10)
)
The desired outcome is in column WANT:
df
#> # A tibble: 9 × 3
#> ID X1 WANT
#> <dbl> <dbl> <dbl>
#> 1 1 5 5
#> 2 1 NA 8
#> 3 1 NA 11
#> 4 1 NA 14
#> 5 2 7 7
#> 6 2 NA 10
#> 7 3 4 4
#> 8 3 7 7
#> 9 3 10 10
Here is what I tried:
df %>%
group_by(ID) %>%
mutate(WANT = ifelse(is.na(X1), lead(X1) + 3, X1)) %>%
ungroup()
#> # A tibble: 9 × 3
#> ID X1 WANT
#> <dbl> <dbl> <dbl>
#> 1 1 5 5
#> 2 1 NA NA
#> 3 1 NA NA
#> 4 1 NA NA
#> 5 2 7 7
#> 6 2 NA NA
#> 7 3 4 4
#> 8 3 7 7
#> 9 3 10 10
Run function and test results
Results