2011-10-13 41 views
2

R的数据框我在R中的以下数据帧:重新排列像一个Excel数据透视表

> 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_sevk201106_iade201106_satis,等等。

+0

我不认为这是数据处理应得的...以及这不用于正确的SQL查询。这仅用于数据显示,但对于进一步处理,您迟早会发现这不方便。我建议使用过滤来处理数据 - 比如'x2 [x2 $ donem == 201106,c('sevk','iade','satis')]'而不是试图让'donem = 201106'一列。然后,当您需要展示结果时,将它们导出到excel并在其中创建数据透视表。 – TMS

+0

这个讨论http://stackoverflow.com/questions/6242106/excel-or-r-preparing-time-series-from-multiple-sources可能与Tomas T.的论点有些相关。不要指望在那里有解决方案,而应该掌握何时使用R何时使用Excel。也许它可以帮助你找到你的个人喜好... –

回答

0

我不认为这是应得的数据处理......以及这不是用于正确的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 = "") 
1

看那reshapeplyr包。重塑包可以以更加可重复的方式完成数据透视表中大部分(可能全部)的优秀部分,并为您可能想要计算和显示的摘要提供更多选项。 plyr软件包适用于任何需要拆分数据结构,对部件进行计算或计算的任何情况,然后将结果重新组合在一起。