Reputation: 574
Here is my data;
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"))
I want to collect dataframes with same months (etc; january, february..) like the data below. There will be 2 dataframes under the list. Same months will be grouped under same list.
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"))
Upvotes: 1
Views: 37
Reputation: 3080
Here's how you can do it in one line:
out <- lapply(setNames(1:12, tolower(month.name)), function(x) d1[grepl(paste0("^", x, "-"), names(d1))])
Each month is then accessed as out$january, out$february, etc.
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
Upvotes: 3