Добавить фреймы данных в список с той же датой в r - PullRequest
1 голос
/ 25 февраля 2020

Вот мои данные;

d1<-structure(list(`1-2006` = structure(c(1.6, 1.6, 1.6, 1.6, 0.208, 
0.405, 0.527, 0.818, 2.2, 3, 2.2, 3, 3, 3, 3, 3.2, 4.6, 5.2), .Names = c("nmaxm5", 
"nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", 
"dmaxm30", "maxhourly", "maxh2", "maxh3", "maxh4", "maxh5", "maxh6", 
"maxh8", "maxh12", "maxh18", "maxdaily")), `1-2007` = structure(c(0.8, 
1.4, 2, 3, 2.345, 4.085, 4.884, 4.884, 3.8, 5.2, 5.2, 5.6, 5.6, 
5.6, 5.6, 5.6, 5.6, 5.6), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", 
"nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", 
"maxh2", "maxh3", "maxh4", "maxh5", "maxh6", "maxh8", "maxh12", 
"maxh18", "maxdaily")), `2-2006` = structure(c(0.8, 1, 1, 1.2, 
0.232, 0.464, 0.691, 1.32, 2.2, 3.2, 4.4, 4.2, 5.8, 5, 6.8, 7.6, 
9, 8.8), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", "nmaxm30", 
"dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", "maxh2", 
"maxh3", "maxh4", "maxh5", "maxh6", "maxh8", "maxh12", "maxh18", 
"maxdaily")), `2-2007` = structure(c(0.4, 0.6, 0.8, 1.2, 0.643, 
1.218, 1.577, 3.128, 1.8, 2.4, 2.4, 3.8, 3.8, 3, 3.8, 3.8, 3.8, 
4), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", 
"dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", "maxh2", "maxh3", 
"maxh4", "maxh5", "maxh6", "maxh8", "maxh12", "maxh18", "maxdaily"
))), .Names = c("1-2006", "1-2007", "2-2006", "2-2007"))

Я хочу собирать кадры с одинаковыми месяцами (и т. Д .; январь, февраль ..), как показано ниже. Под списком будет 2 кадра данных. Те же месяцы будут сгруппированы в одном списке.

    out<-structure(list(january = structure(list(`1-2006` = structure(c(1.6, 
1.6, 1.6, 1.6, 0.208, 0.405, 0.527, 0.818, 2.2, 3, 2.2, 3, 3, 
3, 3, 3.2, 4.6, 5.2), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", 
"nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", 
"maxh2", "maxh3", "maxh4", "maxh5", "maxh6", "maxh8", "maxh12", 
"maxh18", "maxdaily")), `1-2007` = structure(c(0.8, 1.4, 2, 3, 
2.345, 4.085, 4.884, 4.884, 3.8, 5.2, 5.2, 5.6, 5.6, 5.6, 5.6, 
5.6, 5.6, 5.6), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", "nmaxm30", 
"dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", "maxh2", 
"maxh3", "maxh4", "maxh5", "maxh6", "maxh8", "maxh12", "maxh18", 
"maxdaily"))), .Names = c("1-2006", "1-2007")), february = structure(list(
    `2-2006` = structure(c(0.8, 1, 1, 1.2, 0.232, 0.464, 0.691, 
    1.32, 2.2, 3.2, 4.4, 4.2, 5.8, 5, 6.8, 7.6, 9, 8.8), .Names = c("nmaxm5", 
    "nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", 
    "dmaxm30", "maxhourly", "maxh2", "maxh3", "maxh4", "maxh5", 
    "maxh6", "maxh8", "maxh12", "maxh18", "maxdaily")), `2-2007` = structure(c(0.4, 
    0.6, 0.8, 1.2, 0.643, 1.218, 1.577, 3.128, 1.8, 2.4, 2.4, 
    3.8, 3.8, 3, 3.8, 3.8, 3.8, 4), .Names = c("nmaxm5", "nmaxm10", 
    "nmaxm15", "nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", 
    "maxhourly", "maxh2", "maxh3", "maxh4", "maxh5", "maxh6", 
    "maxh8", "maxh12", "maxh18", "maxdaily"))), .Names = c("2-2006", 
"2-2007"))), .Names = c("january", "february"))

1 Ответ

3 голосов
/ 25 февраля 2020

Вот как вы можете сделать это в одной строке:

out <- lapply(setNames(1:12, tolower(month.name)), function(x) d1[grepl(paste0("^", x, "-"), names(d1))])

Каждый месяц доступен как $ январь, $ февраль и т. Д. c.

out$january
$`1-2006`
   nmaxm5   nmaxm10   nmaxm15   nmaxm30    dmaxm5   dmaxm10   dmaxm15   dmaxm30 maxhourly     maxh2     maxh3     maxh4     maxh5     maxh6     maxh8    maxh12    maxh18  maxdaily 
    1.600     1.600     1.600     1.600     0.208     0.405     0.527     0.818     2.200     3.000     2.200     3.000     3.000     3.000     3.000     3.200     4.600     5.200 

$`1-2007`
   nmaxm5   nmaxm10   nmaxm15   nmaxm30    dmaxm5   dmaxm10   dmaxm15   dmaxm30 maxhourly     maxh2     maxh3     maxh4     maxh5     maxh6     maxh8    maxh12    maxh18  maxdaily 
    0.800     1.400     2.000     3.000     2.345     4.085     4.884     4.884     3.800     5.200     5.200     5.600     5.600     5.600     5.600     5.600     5.600     5.600 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...