【发布时间】:2011-12-06 17:38:36
【问题描述】:
我在 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等等。
【问题讨论】:
-
我认为这对于数据处理来说是不应该的......而且这也没有用于正确的 sql 查询。这只是为了数据呈现,但为了进一步处理,你迟早会发现这很不方便。我建议像使用过滤一样处理数据 - 例如
x2[x2$donem==201106,c('sevk','iade','satis')]而不是尝试将donem=201106设为一列。然后,当您需要展示结果时,将它们导出到 Excel 并在那里制作数据透视表。 -
此讨论stackoverflow.com/questions/6242106/… 可能与 Tomas T. 的论点有关。不要指望那里有解决方案,而是要掌握何时使用 R 何时使用 Excel。也许它可以帮助您找到您的个人喜好...
标签: r dataframe pivot-table