Как манипулировать данными .xlsx с помощью вложенных циклов for в R? - PullRequest
0 голосов
/ 17 июня 2019

Вот как выглядит пример:

Year Categories January   February March April      May      June      July    August September   October   November     December

1990          A  4564.0   465465.0    12   468   4884.0  12788.00   4218.00 -58445.86 -90643.00 -122840.1 -155037.29 -187234.4286

1990          B  6487.0   421214.0   878  2112 421283.0  56456.00  54654.00    515.00    212.00     515.0     212.00     515.0000

1990          C 42862.0      512.0   484    48    515.0    212.00    515.00 137858.33     48.00  137858.3      48.00     465.0000

1990          D    15.0  -169222.7    90   456 137858.3     48.00    465.00 135673.83    778.00  135673.8     778.00      12.0000

1990          E 19164.0  -401699.2  -304   246 135673.8    778.00     12.00 133489.33     57.00  133489.3      57.00     478.0000

1991          A 21436.8  -634175.7  -698    36 133489.3     57.00    478.00 131304.83      3.00  131304.8       3.00     331.3333

1991          B 23709.6  -866652.2 -1092  -174 131304.8      3.00  -8210.60 129120.33  30425.33  129120.3  -11463.57     337.8333

1992          A 32800.8 -1796558.2 -2668 -1014 122566.8 -27597.89 -29087.86 292051.00  82253.33  331147.5  -12728.17     363.8333

1992          B 35073.6 -2029034.7 -3062 -1224 120382.3 -32976.00 -34307.17 321333.47  95210.33  367329.4  -14420.56     370.3333

1992          C 37346.4 -2261511.2 -3456 -1434 118197.8 -38354.11 -39526.49 350615.94 108167.33  403511.2  -16112.96     376.8333

Привет, ребята, прежде всего, извините за формат данных примера.Я новичок в stackoverflow и R. У меня проблема с манипулированием данными в R. Я хочу использовать вложенные циклы for для манипулирования этими данными.

То, что я хочу, это именно так:

Я хочу, чтобы категории «A», «B», «C», «D», «E» фиксировались в столбце «Категория» и помещали рядом данные за месяцы.Как январь 1990 г., февраль 1990 г., ...., декабрь 1990 г., январь 1991 г., февраль 1991 г., ..., декабрь 1991 г. Эти месяцы будут соседствовать друг с другом и будут представлены в виде столбцов.Поскольку в некоторые годы нет данных для определенных категорий, следует указать значение «0» в месяцах, соответствующих этим категориям.Как мне написать для этого вложенный цикл for?

Заранее благодарю за помощь.

На самом деле я пытался написать цикл, подобный этому, но не могу написать оператор if-elseв этой петле.Этот код был для моих реальных больших данных, но я создал пример данных для загрузки туда.

require(xlsx)
data = read.xlsx("sample-data.xlsx", sheetName = "Sheet1")

library("tidyverse")
cat_data <- as.data.frame(data$Category)
unique_cat <- as.data.frame(unique(cat_data))

names(unique_cat)[names(unique_cat) == "data$Category"] <- "Category"
month_data <- subset(data, select = -c(1:4))
year_data <- subset(data, select = -c(2:16))


data %>% 
      for (i in 1:length(data)){
        for (j in 1:length(cat_data)){
          for (k in 1:length(month_data)){
              print(c(data)[i,j,k])
    }
  }
}

Это ожидаемый результат (так как я:


Categories Jan.90    Feb.90 Mar.90 Apr.90   May.90 June.90 July.90
1          A   4564  465465.0     12    468   4884.0   12788    4218
2          B   6487  421214.0    878   2112 421283.0   56456   54654
3          C  42862     512.0    484     48    515.0     212     515
4          D     15 -169222.7     90    456 137858.3      48     465
5          E  19164 -401699.2   -304    246 135673.8     778      12
     Aug.90 Sep.90    Oct.90    Nov.90    Dec.90  Jan.91    Feb.91
1 -58445.86 -90643 -122840.1 -155037.3 -187234.4 21436.8 -634175.7
2    515.00    212     515.0     212.0     515.0 23709.6 -866652.2
3 137858.33     48  137858.3      48.0     465.0     0.0       0.0
4 135673.83    778  135673.8     778.0      12.0     0.0       0.0
5 133489.33     57  133489.3      57.0     478.0     0.0       0.0
  Mar.91 Apr.91   May.91 June.91 July.91   Aug.91   Sep.91   Oct.91
1   -698     36 133489.3      57   478.0 131304.8     3.00 131304.8
2  -1092   -174 131304.8       3 -8210.6 129120.3 30425.33 129120.3
3      0      0      0.0       0     0.0      0.0     0.00      0.0
4      0      0      0.0       0     0.0      0.0     0.00      0.0
5      0      0      0.0       0     0.0      0.0     0.00      0.0
     Nov.91   Dec.91  Jan.92   Feb.92 Mar.92 Apr.92   May.92
1      3.00 331.3333 32800.8 -1796558  -2668  -1014 122566.8
2 -11463.57 337.8333 35073.6 -2029035  -3062  -1224 120382.3
3      0.00   0.0000 37346.4 -2261511  -3456  -1434 118197.8
4      0.00   0.0000     0.0        0      0      0      0.0
5      0.00   0.0000     0.0        0      0      0      0.0
    June.92   July.92   Aug.92    Sep.92   Oct.92    Nov.92   Dec.92
1 -27597.89 -29087.86 292051.0  82253.33 331147.5 -12728.17 363.8333
2 -32976.00 -34307.17 321333.5  95210.33 367329.4 -14420.56 370.3333
3 -38354.11 -39526.49 350615.9 108167.33 403511.2 -16112.96 376.8333
4      0.00      0.00      0.0      0.00      0.0      0.00   0.0000
5      0.00      0.00      0.0      0.00      0.0      0.00   0.0000
...