像Excel数据透视表一样重新排列R数据框
我在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",..:
> 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 = "")