Вы можете использовать «который», чтобы определить индексы для желаемых критериев NULL / NA / 0.
Вы можете узнать больше о том, какие
Итак, для вашего вопроса, aрешение может быть:
Настройка тестовых данных
DT_old <- data.frame(date=c("2019-01-01","2019-01-02"),a=1:2,b=2:3,c=3:4,d=4:5, stringsAsFactors = FALSE)
# New Data from SQL query
DT_new <- data.frame(date="2019-01-03",a=0,b=2,c=3,d=4, stringsAsFactors = FALSE)
Привязать новые данные к старым
DT3 <- rbind(DT_old, DT_new) # or use your dplyr logic to row bind old and new datasets
Рассчитать индексы для ваших критериев и заменить предыдущей строкой в привязкенабор данных
# find out indices of the bound dataframe which meet your criteria
n_idx <- which((DT3 ==0)|is.na(DT3)|is.null(DT3), arr.ind=TRUE)
# substitute said indices with values from previous row
DT3[nrow(DT3),n_idx[,2]] <- DT3[nrow(DT3)-1,n_idx[,2]]
Обратите внимание, что предполагается, что из каждого запроса добавляется только одна строка.