Я пытаюсь решить (для меня очень сложную) проблему. Я сделаю все возможное, чтобы объяснить это.
Я работаю со списком, который содержит 150 других списков. Эти подсписки содержат 3 кадра данных каждый. Вот str()
из списка, который содержит 150 списков, содержащих кадры данных:
str(listSM)
$ SE1 :List of 3
..$ d20:'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ d50:'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ d5 :'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
$ SE10 :List of 3
..$ d20:'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ d50:'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ d5 :'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
$ SE100:List of 3
..$ d20:'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ d50:'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
..$ d5 :'data.frame': 96408 obs. of 2 variables:
.. ..$ Date: Date[1:96408], format: "2009-01-01" "2009-01-01" "2009-01-01" ...
.. ..$ SWC : num [1:96408] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
Приведенный выше код показывает только 3 кадра данных. Они называются SE1, SE2, SE3, SE4,… вплоть до SE150. В этих списках всегда есть 3 кадра данных с одинаковыми именами в каждом списке, а именно: d20, d50 и d5.
Вот что я хочу сделать:
Я хочу создать несколько подмножеств для каждого кадра данных (d20, d50, d5) в каждом списке на основе даты и сохранить их в новая переменная с уникальным именем. Каждый фрейм данных содержит даты 2009-2019 гг.
Я написал это в качестве примера:
SE1_d20_2009 <- subset(listSM$SE1$d20, Date <= "2009-12-31 23:00:00")
SE1_d20_2010 <- subset(listSM$SE1$d20, Date > "2009-12-31 23:00:00" & Date <= "2010-12-31 23:00:00")
SE1_d20_2011 <- subset(listSM$SE1$d20, Date > "2010-12-31 23:00:00" & Date <= "2011-12-31 23:00:00")
SE1_d20_2012 <- subset(listSM$SE1$d20, Date > "2011-12-31 23:00:00" & Date <= "2012-12-31 23:00:00")
SE1_d20_2013 <- subset(listSM$SE1$d20, Date > "2012-12-31 23:00:00" & Date <= "2013-12-31 23:00:00")
SE1_d20_2014 <- subset(listSM$SE1$d20, Date > "2013-12-31 23:00:00" & Date <= "2014-12-31 23:00:00")
SE1_d20_2015 <- subset(listSM$SE1$d20, Date > "2014-12-31 23:00:00" & Date <= "2015-12-31 23:00:00")
SE1_d20_2016 <- subset(listSM$SE1$d20, Date > "2015-12-31 23:00:00" & Date <= "2016-12-31 23:00:00")
SE1_d20_2017 <- subset(listSM$SE1$d20, Date > "2016-12-31 23:00:00" & Date <= "2017-12-31 23:00:00")
SE1_d20_2018 <- subset(listSM$SE1$d20, Date > "2017-12-31 23:00:00" & Date <= "2018-12-31 23:00:00")
SE1_d20_2019 <-subset(listSM$SE1$d20, Date > "2018-12-31 23:00:00" & Date <= "2019-12-31 23:00:00"
Как вы можете видеть, я хочу делать ежегодные подмножества. Кроме того, имена переменных зависят от числа SE и числа d . Это данные измерения влажности почвы, поэтому SE обозначает датчик, а d - глубину датчика. Приведенный выше код является примером для имен переменных для SE1 и d20, поэтому имена для SE2 должны быть: SE2_d20_2009, SE2_d20_2010 и т. Д. Но, конечно, я хочу не просто сделать это для d20, но также для d5 и d50, поэтому имена переменных для этих глубин будут: SE2_d5_2009, SE2_d5_2010 // SE2_d50_2009, SE2_d50_2010 и т. д.….
Очевидно, что я мог бы сделать это для каждого кадра данных в списках, как указано выше, но это всего 450 кадров данных, и это займет слишком много времени. Поэтому мне интересно, можно ли это автоматизировать, и если да, то как? Так как я начинающий в R, это выходит за рамки моей компетенции, поэтому я очень надеюсь, что кто-нибудь сможет мне помочь. Не стесняйтесь задавать любые вопросы, если это непонятно, я старался изо всех сил, чтобы объяснить это.
РЕДАКТИРОВАТЬ:
dput(droplevels(listSM$SE1$d20[1:50, ]))
structure(list(Date = structure(c(14245, 14245, 14245, 14245,
14245, 14245, 14245, 14245, 14245, 14245, 14245, 14245, 14245,
14245, 14245, 14245, 14245, 14245, 14245, 14245, 14245, 14245,
14245, 14245, 14246, 14246, 14246, 14246, 14246, 14246, 14246,
14246, 14246, 14246, 14246, 14246, 14246, 14246, 14246, 14246,
14246, 14246, 14246, 14246, 14246, 14246, 14246, 14246, 14247,
14247), class = "Date"), SWC = c(NaN, NaN, NaN, NaN, NaN, NaN,
NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,
NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,
NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,
NaN, NaN, NaN, NaN, NaN)), row.names = c(NA, 50L), class = "data.frame")