library(dplyr)
df <- data.frame(ID = c(1, 1, 1, 1, 2, 2, 3, 3, 3), X1 = c(5, NA, NA, NA, 7, NA, 4, 7, 10), WANT = c(5, 8, 11, 14, 7, 10, 4, 7, 10))
df <- df %>%
group_by(ID) %>%
mutate(WANT = ifelse(is.na(X1), lead(X1) + 3, X1)) %>%
ungroup()
我有 ID 为 X1 的 df,并希望创建 WANT - 当 NA 时将“3”添加到下一个值
使用
lag()
而不是 lead()
让您更接近您想要的东西。
但这并不能根据需要处理连续的 NA
。
library(dplyr)
df |>
mutate(WANT = ifelse(is.na(X1), lag(X1) + 3, X1),
.by = ID)
#> # A tibble: 9 × 3
#> ID X1 WANT
#> <dbl> <dbl> <dbl>
#> 1 1 5 5
#> 2 1 NA 8
#> 3 1 NA NA
#> 4 1 NA NA
#> 5 2 7 7
#> 6 2 NA 10
#> 7 3 4 4
#> 8 3 7 7
#> 9 3 10 10
如果您想为每个连续的
3
添加NA
,您可以使用coalesce()
与 cumsum()
。
df |>
mutate(WANT = coalesce(X1, 3),
WANT = cumsum(WANT),
.by = ID)
#> # 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 11
#> 9 3 10 21