Как насчет сбора, затем склеить год и месяц, а затем распределить. Я использую абсурдный обходной путь, чтобы сохранить правильный порядок столбцов. Попробуйте:
library(dplyr)
library(tidyr)
df %>%
gather(k, v, -Year, -Categories, -Categories) %>%
arrange(Categories, Year) %>%
group_by(Categories) %>%
mutate(n = row_number(),
col = paste0("n", 1000+n, substr(k, 1, 3), ".", substr(Year, 3, 4))) %>%
ungroup() %>%
arrange(col) %>%
select(-Year, -k, -n) %>%
spread(col, v, fill = 0) %>%
rename_at(vars(-Categories), ~substr(., 6, nchar(.)))
Результат
# A tibble: 5 x 49
Categories Jan.90 Feb.90 Mar.90 Apr.90 May.90 Jun.90 Jul.90 Aug.90 Sep.90 Oct.90 Nov.90 Dec.90 Jan.91 Jan.92 Feb.91 Feb.92 Mar.91 Mar.92 Apr.91 Apr.92 May.91
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 4564 4.65e5 12 468 4.88e3 12788 4218 -58446. -90643 -1.23e5 -1.55e5 -1.87e5 21437. 0 -6.34e5 0. -698 0 36 0 1.33e5
2 B 6487 4.21e5 878 2112 4.21e5 56456 54654 515 212 5.15e2 2.12e2 5.15e2 23710. 0 -8.67e5 0. -1092 0 -174 0 1.31e5
3 C 42862 5.12e2 484 48 5.15e2 212 515 137858. 48 1.38e5 4.80e1 4.65e2 0 37346. 0. -2.26e6 0 -3456 0 -1434 0.
4 D 15 -1.69e5 90 456 1.38e5 48 465 135674. 778 1.36e5 7.78e2 1.20e1 0 0 0. 0. 0 0 0 0 0.
5 E 19164 -4.02e5 -304 246 1.36e5 778 12 133489. 57 1.33e5 5.70e1 4.78e2 0 0 0. 0. 0 0 0 0 0.
# … with 27 more variables: May.92 <dbl>, Jun.91 <dbl>, Jun.92 <dbl>, Jul.91 <dbl>, Jul.92 <dbl>, Aug.91 <dbl>, Aug.92 <dbl>, Sep.91 <dbl>, Sep.92 <dbl>, Oct.91 <dbl>,
# Oct.92 <dbl>, Nov.91 <dbl>, Nov.92 <dbl>, Dec.91 <dbl>, Dec.92 <dbl>, Jan.92 <dbl>, Feb.92 <dbl>, Mar.92 <dbl>, Apr.92 <dbl>, May.92 <dbl>, Jun.92 <dbl>, Jul.92 <dbl>,
# Aug.92 <dbl>, Sep.92 <dbl>, Oct.92 <dbl>, Nov.92 <dbl>, Dec.92 <dbl>
Данные
df <- structure(list(Year = c(1990L, 1990L, 1990L, 1990L, 1990L, 1991L,
1991L, 1992L, 1992L, 1992L), Categories = c("A", "B", "C", "D",
"E", "A", "B", "A", "B", "C"), January = c(4564, 6487, 42862,
15, 19164, 21436.8, 23709.6, 32800.8, 35073.6, 37346.4), February = c(465465,
421214, 512, -169222.7, -401699.2, -634175.7, -866652.2, -1796558.2,
-2029034.7, -2261511.2), March = c(12L, 878L, 484L, 90L, -304L,
-698L, -1092L, -2668L, -3062L, -3456L), April = c(468L, 2112L,
48L, 456L, 246L, 36L, -174L, -1014L, -1224L, -1434L), May = c(4884,
421283, 515, 137858.3, 135673.8, 133489.3, 131304.8, 122566.8,
120382.3, 118197.8), June = c(12788, 56456, 212, 48, 778, 57,
3, -27597.89, -32976, -38354.11), July = c(4218, 54654, 515,
465, 12, 478, -8210.6, -29087.86, -34307.17, -39526.49), August = c(-58445.86,
515, 137858.33, 135673.83, 133489.33, 131304.83, 129120.33, 292051,
321333.47, 350615.94), September = c(-90643, 212, 48, 778, 57,
3, 30425.33, 82253.33, 95210.33, 108167.33), October = c(-122840.1,
515, 137858.3, 135673.8, 133489.3, 131304.8, 129120.3, 331147.5,
367329.4, 403511.2), November = c(-155037.29, 212, 48, 778, 57,
3, -11463.57, -12728.17, -14420.56, -16112.96), December = c(-187234.4286,
515, 465, 12, 478, 331.3333, 337.8333, 363.8333, 370.3333, 376.8333
)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))