Перегруппировать фрейм данных R, как в сводной таблице Excel - PullRequest
2 голосов
/ 13 октября 2011

У меня есть следующий фрейм данных в R:

> str(x2)
'data.frame':   262064 obs. of  15 variables:
 $ ykod : int  99 99 99 99 99 99 99 99 99 99 ...
 $ yad  : Factor w/ 38 levels "BAKUGAN","BARBIE",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ per  : Factor w/ 3 levels "2 AYLIK","3 AYLIK",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ donem: int  201106 201106 201106 201106 201106 201106 201106 201106 201106 201106 ...
 $ sayi : int  201106 201106 201106 201106 201106 201106 201106 201106 201106 201106 ...
 $ mkod : int  359 361 362 363 366 849 850 1505 1506 1525 ...
 $ mad  : Factor w/ 9529 levels "    Hilal Gida           ",..: 4473 3322 9360 7169 9359 9290 8903 6057 6055 6620 ...
 $ mtip : Factor w/ 27 levels "Abone Bürosu                                      ",..: 18 18 18 18 18 2 2 10 10 2 ...
 $ kanal: Factor w/ 2 levels "OB","SS": 2 2 2 2 2 2 2 1 1 2 ...
 $ bkod : int  110006 110006 110006 110006 110006 110006 110006 110006 110006 110006 ...
 $ bad  : Factor w/ 208 levels "4. Levent","500 Evler",..: 25 25 25 25 25 25 25 25 25 25 ...
 $ bolge: Factor w/ 12 levels "Adana Şehiriçi",..: 7 7 7 7 7 7 7 7 7 7 ...
 $ sevk : int  5 2 2 2 10 4 3 13 32 4 ...
 $ iade : int  0 2 1 2 4 3 2 0 8 4 ...
 $ satis: int  5 0 1 0 6 1 1 13 24 0 ...

Возможно ли переставить этот фрейм данных как сводную таблицу Excel?Например, я хочу взять ykod = 99 и создать новый фрейм данных с новыми строками и столбцами следующим образом:

                   donem=201106     donem=201107     donem=201108
Row#  mkod  mad   sevk iade satis  sevk iade satis  sevk iade satis
----  ----  ---   ---- ----- ----  ---- ---- ----   ---- ----- ----   
1     654   Abc    10    2    8     15   12   3       8    3    5
2     721   Def
.
. 
4345

Конечно, имена столбцов в приведенном выше примере должны быть воссозданы, например,как 201106_sevk, 201106_iade, 201106_satis и т. д.

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Посмотрите на пакеты reshape и plyr. Пакет изменения формы может сделать большинство (возможно, все) полезных частей сводных таблиц более воспроизводимым способом, плюс дает вам больше опций для сводок, которые вы, возможно, захотите вычислить и отобразить. Пакет plyr полезен в любом случае, когда вы хотите разобрать структуру данных, выполнить вычисление или набор вычислений по частям, а затем собрать результаты обратно.

0 голосов
/ 13 октября 2011

Я не думаю, что это заслуживает обработки данных ... а также это не используется в правильных SQL-запросах.Это обычно заслуживает только для представления данных, но для дальнейшей обработки вы рано или поздно сочтете это неудобным.Я бы посоветовал обрабатывать данные, используя фильтрацию - например, x2[x2$donem==201106,c('sevk','iade','satis')], а не пытаться сделать donem=201106 столбцом.И затем, когда вам нужно представить результаты, экспортируйте их в Excel и создайте сводную таблицу там.

Но, если вы все еще настаиваете на этом, это немного неуклюже, но вы можете попробовать tapply (яуверен, что ребята R придут с гораздо лучшими решениями):

pivot = tapply(df$value, list(df$row, df$column), identity)

Затем вы можете cbind() другие атрибуты строки, а также изменить имена столбцов, например:

colnames(pivot) = paste("var_", colnames(pivot), sep = "") 
...