3

関数を使用しcastて、ワイドフォーマットのデータフレームを作成しています。を使用した結果の列の順序を制御できるようにしたいと考えていますcast。これは可能ですか?

以下の例では、順序は次のとおりです。cogs_xdep, sales, sga

私はそれらを注文したい:sales, cogs_xdep, sga

melt全体のプロセスは実際には、キャストの前に長いフォーマットに変更するために使用するワイド フォーマットのフレームから始まります。

例を以下に示します

>rawdata_all
  coy_name gvkey_iid    factor X20130930 X20130831 X20130731 X20130630 X20130531    X20130430 X20130331 X20130228 X20130131 X20121231
1    Coy 1    111111     sales         1         2         3         4         5         6         7         8         9        10
2    Coy 2     22222     sales         2        12        22        32        42        52        62        72        82        92
3    Coy 3    333333     sales         3       103       203       303       403       503       603       703       803       903
4    Coy 1    111111 cogs_xdep         4         5         6         7         8         9        10        11        12        13
5    Coy 2     22222 cogs_xdep         5        15        25        35        45        55        65        75        85        95
6    Coy 3    333333 cogs_xdep         6       106       206       306       406       506       606       706       806       906
7    Coy 1    111111       sga         7         8         9        10        11        12        13        14        15        16
8    Coy 2     22222       sga         8        18        28        38        48        58        68        78        88        98
9    Coy 3    333333       sga         9       109       209       309       409       509       609       709       809       909
...

溶かしてロングフォーマットにする

> non_data_cols <- 3       # There are 3 non-value columns

> master_long <- melt(rawdata_all, id=1:non_data_cols,measured=(non_data_cols+1):length(rawdata_all))

> master_long

    coy_name gvkey_iid    factor  variable value
1      Coy 1    111111     sales X20130930     1
2      Coy 2     22222     sales X20130930     2
3      Coy 3    333333     sales X20130930     3
4      Coy 1    111111 cogs_xdep X20130930     4
5      Coy 2     22222 cogs_xdep X20130930     5
6      Coy 3    333333 cogs_xdep X20130930     6
7      Coy 1    111111       sga X20130930     7
8      Coy 2     22222       sga X20130930     8
...

最後に「factor」にキャストして、より広いデータ フレームを作成します。(「変数」の名前を「日付」に変更し、日付値の先頭から「X」を削除しました)。

> master <- cast(master_long, ...~factor)
 coy_name gvkey_iid     date cogs_xdep sales  sga
1     Coy 1    111111 20130930         4     1    7
2     Coy 1    111111 20130831         5     2    8
3     Coy 1    111111 20130731         6     3    9
4     Coy 1    111111 20130630         7     4   10
5     Coy 1    111111 20130531         8     5   11
6     Coy 1    111111 20130430         9     6   12
7     Coy 1    111111 20130331        10     7   13
8     Coy 1    111111 20130228        11     8   14
9     Coy 1    111111 20130131        12     9   15
10    Coy 1    111111 20121231        13    10   16
...

理想的には、最後の 3 つの列を次の順序で配置したいと考えています: sales、cogs_xdep、sga。cast元のデータ フレームと長い形式のデータ フレームの両方で目的の順序で並べられていることがわかるため、アルファベット順に並べられているように見えます。

どんな提案でも大歓迎です。列を 3 つだけ再配置するのは簡単ですが、30 列以上の実際の状況ではより面倒です。

ありがとう、

4

2 に答える 2

2

列の順序が重要である理由がわかりません。ただし、次のようにいつでも順序を変更できます。

master[,c(names(master)[1:3], as.character(unique(master_long$factor)))]

   coy_name gvkey_iid  variable sales cogs_xdep sga
1     Coy_1    111111 X20130930     1         4   7
2     Coy_1    111111 X20130831     2         5   8
3     Coy_1    111111 X20130731     3         6   9
4     Coy_1    111111 X20130630     4         7  10
5     Coy_1    111111 X20130531     5         8  11
6     Coy_1    111111 X20130430     6         9  12
7     Coy_1    111111 X20130331     7        10  13
8     Coy_1    111111 X20130228     8        11  14
9     Coy_1    111111 X20130131     9        12  15
10    Coy_1    111111 X20121231    10        13  16
11    Coy_2     22222 X20130930     2         5   8
12    Coy_2     22222 X20130831    12        15  18
13    Coy_2     22222 X20130731    22        25  28
14    Coy_2     22222 X20130630    32        35  38
15    Coy_2     22222 X20130531    42        45  48
16    Coy_2     22222 X20130430    52        55  58
17    Coy_2     22222 X20130331    62        65  68
18    Coy_2     22222 X20130228    72        75  78
19    Coy_2     22222 X20130131    82        85  88
20    Coy_2     22222 X20121231    92        95  98
21    Coy_3    333333 X20130930     3         6   9
22    Coy_3    333333 X20130831   103       106 109
23    Coy_3    333333 X20130731   203       206 209
24    Coy_3    333333 X20130630   303       306 309
25    Coy_3    333333 X20130531   403       406 409
26    Coy_3    333333 X20130430   503       506 509
27    Coy_3    333333 X20130331   603       606 609
28    Coy_3    333333 X20130228   703       706 709
29    Coy_3    333333 X20130131   803       806 809
30    Coy_3    333333 X20121231   903       906 909

パッケージ reshape2 はほとんど reshape に取って代わられていることに注意してください。

于 2013-09-17T13:19:09.223 に答える