Я работаю с вложенным списком (наземные датчики) списков (измерения глубины) списков (фреймы данных за каждый год с 2014-2018). 'SE' обозначает датчик и его номер, а 'd' обозначает глубину, на которой датчик находится в почве. выглядит следующим образом:
str(GRP3_OUT_gwFERN)
List of 9
$ SE10:List of 3
..$ d20:List of 5
.. ..$ 2014:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2014-01-01" "2014-01-01" "2014-01-01" ...
.. .. ..$ SWC : logi [1:8760] NA NA NA NA NA NA ...
.. ..$ 2015:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2015-01-01" "2015-01-01" "2015-01-01" ...
.. .. ..$ SWC : logi [1:8760] NA NA NA NA NA NA ...
.. ..$ 2016:'data.frame': 8784 obs. of 2 variables:
.. .. ..$ Date: Date[1:8784], format: "2016-01-01" "2016-01-01" "2016-01-01" ...
.. .. ..$ SWC : logi [1:8784] NA NA NA NA NA NA ...
.. ..$ 2017:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2017-01-01" "2017-01-01" "2017-01-01" ...
.. .. ..$ SWC : num [1:8760] NA NA NA NA NA NA NA NA NA NA ...
.. ..$ 2018:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2018-01-01" "2018-01-01" "2018-01-01" ...
.. .. ..$ SWC : logi [1:8760] NA NA NA NA NA NA ...
..$ d50:List of 5
.. ..$ 2014:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2014-01-01" "2014-01-01" "2014-01-01" ...
.. .. ..$ SWC : num [1:8760] 39.8 39.7 39.8 39.7 39.7 ...
.. ..$ 2015:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2015-01-01" "2015-01-01" "2015-01-01" ...
.. .. ..$ SWC : num [1:8760] 39.7 39.7 39.7 39.7 39.7 ...
.. ..$ 2016:'data.frame': 8784 obs. of 2 variables:
.. .. ..$ Date: Date[1:8784], format: "2016-01-01" "2016-01-01" "2016-01-01" ...
.. .. ..$ SWC : num [1:8784] 39 39.1 39.1 39 39 ...
.. ..$ 2017:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2017-01-01" "2017-01-01" "2017-01-01" ...
.. .. ..$ SWC : num [1:8760] 37.9 38 37.9 37.9 37.9 ...
.. ..$ 2018:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2018-01-01" "2018-01-01" "2018-01-01" ...
.. .. ..$ SWC : num [1:8760] 39.1 39 39.1 39 39 ...
..$ d5 :List of 5
.. ..$ 2014:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2014-01-01" "2014-01-01" "2014-01-01" ...
.. .. ..$ SWC : num [1:8760] 41 41 40.9 41 40.9 ...
.. ..$ 2015:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2015-01-01" "2015-01-01" "2015-01-01" ...
.. .. ..$ SWC : num [1:8760] 42 42.1 42.1 42 42.1 ...
.. ..$ 2016:'data.frame': 8784 obs. of 2 variables:
.. .. ..$ Date: Date[1:8784], format: "2016-01-01" "2016-01-01" "2016-01-01" ...
.. .. ..$ SWC : num [1:8784] 43.3 43.4 43.4 43.3 43.3 ...
.. ..$ 2017:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2017-01-01" "2017-01-01" "2017-01-01" ...
.. .. ..$ SWC : num [1:8760] 42.1 42.1 42.2 42.1 42.1 ...
.. ..$ 2018:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2018-01-01" "2018-01-01" "2018-01-01" ...
.. .. ..$ SWC : num [1:8760] 44 44.1 44.1 44.1 44.1 ...
$ SE11:List of 3
..$ d20:List of 5
.. ..$ 2014:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2014-01-01" "2014-01-01" "2014-01-01" ...
.. .. ..$ SWC : num [1:8760] 46.6 46.5 46.4 46.4 46.4 ...
.. ..$ 2015:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2015-01-01" "2015-01-01" "2015-01-01" ...
.. .. ..$ SWC : num [1:8760] 46.6 46.5 46.6 46.6 46.6 ...
.. ..$ 2016:'data.frame': 8784 obs. of 2 variables:
.. .. ..$ Date: Date[1:8784], format: "2016-01-01" "2016-01-01" "2016-01-01" ...
.. .. ..$ SWC : num [1:8784] 45.1 45.1 45.1 45.1 45.1 ...
.. ..$ 2017:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2017-01-01" "2017-01-01" "2017-01-01" ...
.. .. ..$ SWC : num [1:8760] 40.2 40.2 40.2 40.2 40.2 ...
.. ..$ 2018:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2018-01-01" "2018-01-01" "2018-01-01" ...
.. .. ..$ SWC : num [1:8760] 49.1 49.2 49.3 49.2 49.3 ...
..$ d50:List of 5
.. ..$ 2014:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2014-01-01" "2014-01-01" "2014-01-01" ...
.. .. ..$ SWC : num [1:8760] 34.1 34 34.1 34 34 ...
.. ..$ 2015:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2015-01-01" "2015-01-01" "2015-01-01" ...
.. .. ..$ SWC : num [1:8760] 32.8 32.8 32.8 32.7 32.7 ...
.. ..$ 2016:'data.frame': 8784 obs. of 2 variables:
.. .. ..$ Date: Date[1:8784], format: "2016-01-01" "2016-01-01" "2016-01-01" ...
.. .. ..$ SWC : logi [1:8784] NA NA NA NA NA NA ...
.. ..$ 2017:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2017-01-01" "2017-01-01" "2017-01-01" ...
.. .. ..$ SWC : logi [1:8760] NA NA NA NA NA NA ...
.. ..$ 2018:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2018-01-01" "2018-01-01" "2018-01-01" ...
.. .. ..$ SWC : logi [1:8760] NA NA NA NA NA NA ...
..$ d5 :List of 5
.. ..$ 2014:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2014-01-01" "2014-01-01" "2014-01-01" ...
.. .. ..$ SWC : num [1:8760] 33.8 33.8 33.8 33.8 33.7 ...
.. ..$ 2015:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2015-01-01" "2015-01-01" "2015-01-01" ...
.. .. ..$ SWC : num [1:8760] 35.7 35.7 35.7 35.7 35.7 ...
.. ..$ 2016:'data.frame': 8784 obs. of 2 variables:
.. .. ..$ Date: Date[1:8784], format: "2016-01-01" "2016-01-01" "2016-01-01" ...
.. .. ..$ SWC : num [1:8784] 31.5 31.5 31.5 31.5 31.5 ...
.. ..$ 2017:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2017-01-01" "2017-01-01" "2017-01-01" ...
.. .. ..$ SWC : num [1:8760] 28.3 28.3 28.3 28.2 28.2 ...
.. ..$ 2018:'data.frame': 8760 obs. of 2 variables:
.. .. ..$ Date: Date[1:8760], format: "2018-01-01" "2018-01-01" "2018-01-01" ...
.. .. ..$ SWC : num [1:8760] 35.4 35.5 35.6 35.5 35.4 ..
Поскольку все кадры данных содержат значения NA, я хочу выполнить линейную регрессию, чтобы заполнить промежутки значениями NA. Я думаю, что для этого мне нужно реструктурировать свой список таким образом, чтобы я получил план данных за 2014 год, глубину 20 и все датчики, которые есть в списке за тот же год и глубину . Затем на следующем кадре данных будет то же самое для 2015 года, в следующем на 2016 год и так далее ...
Почему я хочу это сделать? Потому что для выполнения линейной регрессии я хочу создать индикаторную переменную в новом столбце для (как пример) SE11 и заполнить промежутки NA значениями от другого датчика, где коэффициент корреляции самый высокий . Вот как это должно выглядеть в 2014 году, например:
SE11_d20_2014_SWC SE12_d20_2014_SWC SE_44_d20_2014_SWC
2 NA 4
3 2 6
NA 3 NA
6 NA 3
SE11_d50_2014_SWC SE12_d50_2014_SWC SE_44_d50_2014_SWC
2 NA 4
3 2 6
4 5 4
NA 3 NA
6 NA 3
SE11_d5_2014_SWC SE12_d5_2014_SWC SE_44_d5_2014_SWC
2 NA 4
3 2 6
4 5 4
NA 3 NA
6 NA 3
Я уже провел некоторое исследование и искал списки реструктуризации, но, к сожалению, не смог найти ничего, что могло бы помочь меня. Кто-нибудь может помочь?
РЕДАКТИРОВАТЬ для Тойдата: (копия моего списка и его структура)
dat <- setNames(replicate(3, setNames(replicate(3, setNames(lapply(2014:2018, function(y) {
d <- expand.grid(date=as.Date(as.character(seq(ISOdate(y, 1, 1, 0), ISOdate(y, 12, 31, 0), by="day"))),
hour=1:24)
d$swc <- rnorm(nrow(d))
d[order(d$date), -2]
}), 2014:2018), simplify=F), c("d20", "d50", "d5")), simplify=F), c("SE104", "SE105", "SE106"))
Фил