Как я могу манипулировать этими данными с помощью цикла for в R - PullRequest
0 голосов
/ 12 июня 2019

sample data

У меня проблема с манипулированием данными в R. Что мне нужно в этой работе, так это манипулировать данными через sample-data в ссылке. Когда я попытался сделать это, я попытался использовать пакет dplyr, но это не сработало. Поэтому я хочу сделать это с помощью цикла for.

Что я хочу именно это:

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

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

1 Ответ

1 голос
/ 12 июня 2019

Используя подделку вашей картинки, я написал следующее. Дайте мне знать, если выходной сигнал переменного тока. Это похоже на предложение rfortin, но с data.table вместо dplyr.

Код:

library(data.table)

dt <- melt(data, id.vars = c("Year", "Category"), measure.vars = c("Jan", "Feb"), 
           variable.name = "Month", value.name = "Profit") %>%
  .[, `Month-Year`:= paste(`Month`, `Year`, sep = " ")] %>%
  dcast(., `Category` ~ `Month-Year`, fun.aggregate = sum, value.var = "Profit")

Данные:

data <- data.table(Year = c(1999,1999,1999,2000,2000,2000,2001,2001,2001), 
                   Category = c("A", "B", "C","A", "B", "C","A", "B", "C"), 
                   Jan = c(234234,3413,134,134,13423,1324,1324,1235,54), 
                   Feb = c(234523,435234,0,2342,0,153,24,234,72))

Выход:

   Category Feb 1999 Feb 2000 Feb 2001 Jan 1999 Jan 2000 Jan 2001
1:        A   234523     2342       24   234234      134     1324
2:        B   435234        0      234     3413    13423     1235
3:        C        0      153       72      134     1324       54
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...