Вам не нужно X_shifted
, вы можете использовать lag
, что дает вам предыдущее значение
library(dplyr)
df %>% mutate(x_fixed = ifelse(temp.change == 0, lag(X), X))
Или, если нам нужно X
от последнего ненулевого значения temp.change
, мы можно использовать:
df %>%
mutate(X_fixed = replace(X, temp.change == 0,NA)) %>%
tidyr::fill(X_fixed)
# temp.change X X_fixed
#1 9.5 1 1
#2 1.0 1 1
#3 -0.5 1 1
#4 -1.0 0 0
#5 -0.5 0 0
#6 0.0 1 0
#7 0.0 1 0
#8 3.0 1 1
#9 0.0 0 1
#10 1.0 1 1
данные
df <- structure(list(temp.change = c(9.5, 1, -0.5, -1, -0.5, 0, 0,
3, 0, 1), X = c(1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L)),
row.names = c(NA, -10L), class = "data.frame")