Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
像Excel数据透视表一样重新排列R数据框_R_Dataframe_Pivot Table - Fatal编程技术网

像Excel数据透视表一样重新排列R数据框

像Excel数据透视表一样重新排列R数据框,r,dataframe,pivot-table,R,Dataframe,Pivot Table,我在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",..:

我在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并在那里生成透视表

但是,如果你仍然坚持,这有点笨拙,但你可以试试tapply(我相信R的人会有更好的解决方案):

然后,您可以
cbind()
其他行属性,还可以更改列名,如:

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

查看
重塑
plyr
包。重塑包可以以更可复制的方式完成数据透视表的大部分(可能是全部)好的部分,此外,它还为您提供了更多可能需要计算和显示的摘要选项。plyr软件包对于任何情况都很有用,在这种情况下,您需要分离数据结构,对零件进行计算或一组计算,然后将结果重新组合在一起。

我认为这不值得用于数据处理。。。此外,这在正确的sql查询中没有使用。这只是为了数据表示,但为了进一步处理,您迟早会发现这很不方便。我建议使用过滤方式处理数据,比如
x2[x2$donem==201106,c('sevk','iade','satis')]
而不是尝试将
donem=201106
列成一列。然后,当您需要显示结果时,将其导出到excel,并在那里生成透视表。此讨论可能与Tomas T.的论点有关。不要期望有解决方案,而是掌握何时使用R和何时使用Excel。也许它能帮助你找到你的个人喜好。。。
colnames(pivot) = paste("var_", colnames(pivot), sep = "")