У меня есть кадр данных временного ряда в R, который имеет столбец V1, который состоит из целых чисел с несколькими NA, разбросанными по всему. Я хочу перебрать этот столбец и вычесть V1 из себя за один шаг ранее. Однако я хочу игнорировать значения NA в V1 и использовать последнее не-значение NA в вычитании. Если текущее значение V1 равно NA, тогда разница должна возвращать NA. Ниже приведен пример
V1 <- c(1, 3, 4, NA, NA, 6, 9, NA, 10)
time <- 1:length(V1)
dat <- data.frame(time = time,
V1 = V1)
lag_diff <- c(NA, 2, 1, NA, NA, 2, 3, NA, 1) # The result I want
diff(dat$V1) # Not the result I want
Я бы предпочел не делать это с циклами, потому что у меня есть сотни фреймов данных, каждый с> 10000 строк.
Моей первой мыслью для решения этой проблемы было отфильтровать строки NA, выполнить итеративный расчет разности, а затем повторно вставить отфильтрованные строки, но я не могу придумать, как это сделать. Это тоже не выглядит очень аккуратно, и я не уверен, что это будет быстрее, чем зацикливание. Любая помощь приветствуется, бонусные баллы, если решение использует функции Tidyverse.