Вот несколько вариантов. В первых 2 я использовал mutate_at
, чтобы удалить 0 из этих столбцов, а затем fill
из tidyr
, чтобы заполнить вверх.
В третьем я использовал lead
, чтобы взять значение снизу, если значение в этом столбце равно 0.
library(tidyverse)
df %>%
mutate_at(vars(Var3, Var4), function(x) ifelse(x == 0, NA, x)) %>%
fill(Var3, Var4, .direction = "up")
#> # A tibble: 4 x 5
#> Date Avc1 Xrt2 Var3 Var4
#> <date> <int> <int> <int> <int>
#> 1 2017-04-04 0 0 22 25
#> 2 2017-04-04 10 18 22 25
#> 3 2017-04-04 8 12 16 20
#> 4 2017-04-04 5 10 13 18
df %>%
mutate_at(vars(Var3, Var4), na_if, 0) %>%
fill(Var3, Var4, .direction = "up")
#> # A tibble: 4 x 5
#> Date Avc1 Xrt2 Var3 Var4
#> <date> <int> <int> <int> <int>
#> 1 2017-04-04 0 0 22 25
#> 2 2017-04-04 10 18 22 25
#> 3 2017-04-04 8 12 16 20
#> 4 2017-04-04 5 10 13 18
df %>%
mutate_at(vars(Var3, Var4), function(x) ifelse(x == 0, lead(x), x))
#> # A tibble: 4 x 5
#> Date Avc1 Xrt2 Var3 Var4
#> <date> <int> <int> <int> <int>
#> 1 2017-04-04 0 0 22 25
#> 2 2017-04-04 10 18 22 25
#> 3 2017-04-04 8 12 16 20
#> 4 2017-04-04 5 10 13 18
Создано в 2018-05-06 пакетом Представ (v0.2.0).