2017-08-30 11 views
0

私は、次のようなデータセットを持つデータフレームを拡張するように設定大きいデータの行と年間の切り替え:は垂直

 ColA ColB 1910 1911 1912 1913 1914 1915 1916 1917 
1  1  a  84  62  31  64  38  46  62  13 
2  1  b  73  31 100  36  30  93  49  10 
3  1  c  72  29  49  14  33  18  67  60 
4  1  d  53 100  41  76  65  68  35  3 
5  1  e  63  20  2  59  56  68  26  49 
6  2  a  98  98  41  9  31  36  19  47 
7  2  b  63  54  12  15  85  98  70  17 
8  2  c  54  68  73  6  7  12  52  73 
9  2  d  42  97  22  92  63  96  72  8 
10  2  e  10  69  21  84  31  75  65  56 
11  3  a  93  36  47  95  2  45  34  85 
12  3  b  52  10  52  96  48  39  89  46 
13  3  c  47  82  58  58  76  43  4  57 
14  3  d  91  40  59  77  68  23  78  6 
15  3  e  70  16  60  84  13 100  29  29 

Iが列Bで年間切り替え助けるのではなく、重複したカラムを持つよりも、I必要Rでデータフレームを垂直方向に拡張したいと考えています。

多くの質問は似ていますが、私はプロセスを動作させることができません。

すべてのヘルプやガイダンスは大幅に私たちは、変換を行うためにdplyrtidyrを使用することができます

+1

あなたが試したものを、私たちを表示しますか? –

+0

あなたはあなたのデータをワイドからロングに変換しようとしているようです。 'reshape2'または 'tidyr'パッケージを使用してください。 –

答えて

0

をいただければ幸いです。 gatherは、データフレームをワイドフォーマットからロングフォーマットに変換することができます。 -ColA-ColBを使用して変換処理を指定すると、ColAColBは含まれません。これに対して、spreadでは、ロングフォーマットをワイドフォーマットに変換します。 renameは、列の名前を変更する機能です。 dt2が最終出力です。

library(dplyr) 
library(tidyr) 

dt2 <- dt %>% 
    gather(Year, Value, -ColA, -ColB) %>% 
    spread(ColB, Value) %>% 
    rename(ColB = Year) 

dt2 
    ColA ColB a b c d e 
1  1 1910 84 73 72 53 63 
2  1 1911 62 31 29 100 20 
3  1 1912 31 100 49 41 2 
4  1 1913 64 36 14 76 59 
5  1 1914 38 30 33 65 56 
6  1 1915 46 93 18 68 68 
7  1 1916 62 49 67 35 26 
8  1 1917 13 10 60 3 49 
9  2 1910 98 63 54 42 10 
10 2 1911 98 54 68 97 69 
11 2 1912 41 12 73 22 21 
12 2 1913 9 15 6 92 84 
13 2 1914 31 85 7 63 31 
14 2 1915 36 98 12 96 75 
15 2 1916 19 70 52 72 65 
16 2 1917 47 17 73 8 56 
17 3 1910 93 52 47 91 70 
18 3 1911 36 10 82 40 16 
19 3 1912 47 52 58 59 60 
20 3 1913 95 96 58 77 84 
21 3 1914 2 48 76 68 13 
22 3 1915 45 39 43 23 100 
23 3 1916 34 89 4 78 29 
24 3 1917 85 46 57 6 29 

データ

dt <- read.table(text = " ColA ColB 1910 1911 1912 1913 1914 1915 1916 1917 
1  1  a  84  62  31  64  38  46  62  13 
       2  1  b  73  31 100  36  30  93  49  10 
       3  1  c  72  29  49  14  33  18  67  60 
       4  1  d  53 100  41  76  65  68  35  3 
       5  1  e  63  20  2  59  56  68  26  49 
       6  2  a  98  98  41  9  31  36  19  47 
       7  2  b  63  54  12  15  85  98  70  17 
       8  2  c  54  68  73  6  7  12  52  73 
       9  2  d  42  97  22  92  63  96  72  8 
       10  2  e  10  69  21  84  31  75  65  56 
       11  3  a  93  36  47  95  2  45  34  85 
       12  3  b  52  10  52  96  48  39  89  46 
       13  3  c  47  82  58  58  76  43  4  57 
       14  3  d  91  40  59  77  68  23  78  6 
       15  3  e  70  16  60  84  13 100  29  29", 
       header = TRUE, stringsAsFactors = FALSE) 


colnames(dt) <- c("ColA", "ColB", as.character(1910:1917))