Смещение нуля для набора данных датчика

#r #offset #zero #drift

Вопрос:

Я не могу найти ответ в поиске, но, возможно, я использую неправильные термины. Я пытаюсь свести к нулю данные датчика глубины смещения, которые дрейфуют.

У меня есть большой набор данных за несколько месяцев с шагом в 5 секунд, он выглядит так:

   Depth Temperature Light_Level          Local_time
1  64.0       27.55         148 2013-10-14 12:30:00
2  65.5       27.50         148 2013-10-14 12:30:05
3  65.5       27.40         148 2013-10-14 12:30:10
4  66.0       27.35         148 2013-10-14 12:30:15
5  67.5       27.25         147 2013-10-14 12:30:20
 

Мне нужно настроить так, чтобы 0 было минимальным значением глубины. Для этого я использую этот код:

 daily_depths <- with(dataset_1, aggregate(Depth ~ as.Date(Local_time), FUN =  function(x) c(Min = min(x), Max = max(x)))) #pulls out min daily depth for each day

min_max <- do.call(data.frame, daily_depths) #converts to a df with date, min and max values

MA5 <- stats::filter(min_max$Depth.Min, rep(1,5), sides = 2)/5 #calculates a moving average from 5 values centered on the current value
 

MA5 выводится в виде временного ряда с началом = 1, концом = 180 (или длиной набора данных в днях), частотой = 1

например, напечатано: [1] NA NA -0.6 -0.6 -0.6 -0.5 -0.5 -0.5 -0.5 -0.5 ……. -0.5 НА-НА

Теперь я хочу вычесть дневное значение из всех точек данных за этот день. Есть несколько проблем:

  1. первые два и последние два дня не имеют 5-дневной скользящей средней. Я хотел бы создать среднее значение и заменить NA этими числами. Для предпоследнего и последнего это простая модификация MA, использующая стороны = 1
  2. для первого и второго я не уверен, как, учитывая, что функция сторон не позволяет использовать будущие значения.
  3. Как только у меня будут эти цифры, как мне затем заменить NA на них во временном ряду MA5

Наконец, мне нужно будет добавить или вычесть значение дневной скользящей средней из каждого значения глубины соответствующего дня, это будет зависеть от того, является ли число положительным или отрицательным, чтобы исправить его обратно на 0. Любая помощь в этом была бы отличной. Большое спасибо

Ответ №1:

Я закончил тем, что создал функцию в ИГОРЕ, используя окно движущегося поля, чтобы вычислить наименьшее значение поля, а затем создать скользящее среднее по данным. Затем, используя созданную мной волну, я вычел эту волну из данных, изменив весь набор данных на скорректированное значение. Наконец, я заменяю любые значения ниже 0 на 0, чтобы глубина всегда была 0 или больше.