Решение 1a: Предполагается увеличение по сравнению с предыдущими пропущенными значениями, с 2 последовательными пропущенными строками
Using dplyr
:
tmp.data %>%
mutate(val2 = ifelse(is.na(val2), lag(val2) + 1, val2),
val2 = ifelse(is.na(val2), lag(val2) + 1, val2))
Решение 1b: Предполагается увеличение по сравнению с предыдущим пропущенным значением (s), с N последовательными пропущенными строками
с использованием data.table
, zoo
и dplyr
:
setDT(tmp.data)[, consec := seq_len(.N), by=rleid(val2)]
tmp.data %>%
mutate(val2 = ifelse(is.na(val2), na.locf(val2) + consec, val2)) %>%
select(-consec)
или записанными вместе:
tmp.data %>%
group_by(rleid(val2)) %>%
mutate(consec = seq_along(val2)) %>%
ungroup() %>%
mutate(val2 = ifelse(is.na(val2), na.locf(val2) + consec, val2)) %>%
select(id, val1, val2)
Решение2: не предполагая увеличения по сравнению с предыдущими пропущенными значениями
с использованием dplyr
и zoo
:
tmp.data %>%
mutate(val2 = ifelse(is.na(val2), na.locf(val2) + 1, val2))