заполнить NA в сериях времени от одной и той же даты и времени, разных лет - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть временной ряд с данными за три разных года.Там много пропущенных данных.Я хотел бы заполнить эти NA значениями из той же даты и времени, но в другой год .

Если, например, в 2017 году отсутствует значение и данные изте же дата и время в 2016 и 2015 годах, я хочу усреднить два, чтобы заполнить пропущенное значение в 2017 году. Если доступны данные только за один год, я хочу использовать эту единственную точку данных для замены пропущенного значения.

Вот df с пропущенными значениями:

enter image description here

structure(list(timestamp = c("2015-09-26 06:30", "2016-09-26 06:30", 
"2017-09-26 06:30", "2015-09-26 07:00", "2017-09-26 07:00", "2015-09-26 07:30", 
"2016-09-26 07:30", "2017-09-26 07:30"), ex = c(NA, 5.52, NA, 
5.99, NA, 5.56, 5.24, NA), in = c(6.08, NA, NA, NA, NA, NA, 
NA, NA), nee = c(NA, -1.6965, NA, -3.4113, NA, -8.1687, -12.9374, 
NA), year = c(2015L, 2016L, 2017L, 2015L, 2017L, 2015L, 2016L, 
2017L), time = c("06:30", "06:30", "06:30", "07:00", "07:00", 
"07:30", "07:30", "07:30"), datetime = c("09-26 06:30", "09-26 06:30", 
"09-26 06:30", "09-26 07:00", "09-26 07:00", "09-26 07:30", "09-26 07:30", 
"09-26 07:30")), class = "data.frame", row.names = c(NA, -8L))

А вот идеальный результирующий df с заменой NA:

enter image description here

structure(list(timestamp = c("2015-09-26 06:30", "2016-09-26 06:30", 
"2017-09-26 06:30", "2015-09-26 07:00", "2017-09-26 07:00", "2015-09-26 07:30", 
"2016-09-26 07:30", "2017-09-26 07:30"), ex = c(NA, 5.52, NA, 
5.99, NA, 5.56, 5.24, NA), in = c(6.08, NA, NA, NA, NA, NA, 
NA, NA), nee = c(NA, -1.6965, NA, -3.4113, NA, -8.1687, -12.9374, 
NA), year = c(2015L, 2016L, 2017L, 2015L, 2017L, 2015L, 2016L, 
2017L), time = c("06:30", "06:30", "06:30", "07:00", "07:00", 
"07:30", "07:30", "07:30"), datetime = c("09-26 06:30", "09-26 06:30", 
"09-26 06:30", "09-26 07:00", "09-26 07:00", "09-26 07:30", "09-26 07:30", 
"09-26 07:30"), ex_filled = c(5.52, 5.52, 5.52, 5.99, 5.99, 5.56, 
5.24, 5.4), in_filled = c(6.08, 6.08, 6.08, NA, NA, NA, NA, NA
), nee_filled = c(-1.7, -1.7, -1.7, -3.41, -3.41, -8.17, -12.94, 
-10.55)), class = "data.frame", row.names = c(NA, -8L))

Я пробовал несколько решений для циклов for и использования zoo, но не могу получить то, что мне нужно.

...