2017-10-09 9 views
1

私は以下の表をRに書いています。それはサウザンドバレルの原油輸入を示しています。列は数年で、行の各年の月:R:テーブルの列を再編

> oil 
    Year 
Month 2014 2015 2016 2017 
    1 288458 293297 300915 331240 
    2 256340 259626 291915 281094 
    3 286934 298196 310038 311840 
    4 288002 281216 294659 307314 
    5 291004 294570 315600 329468 
    6 265109 288139 301625 307190 
    7 294363 296712 326494 305336 
    8 288878 305609 319990  0 
    9 275435 280736 305981  0 
    10 276658 274087 300671  0 
    11 270260 274532 308776  0 
    12 291463 302014 303563  0 

これは、テーブルクラスです:

> class(oil) 
[1] "xtabs" "table" 

私は四半期の代わりに、数ヶ月にそれを再編成したいと思います:

Quarter 2014 2015 2016 2017 
     1 288458 293297 300915 331240 
     2 256340 259626 291915 281094 
     3 286934 298196 310038 311840 
     4 288002 281216 294659 307314 

これは実際の四半期の数字ではありません。私は例として使用しています。

これを行うにはどのような方法が最適ですか?

+0

はい、@www、取得しようとしています四半期合計。 – Agarp

答えて

1

あなたが間隔を定義することができdo.callでこれの出力は、それがすべての三列を合計する上その後、リスト内lapplycolSumsを、その後rbind(1:9、10時12 3、4:6,7) 。ご例えば

data(iris) 

mytable <- with(iris, table(Sepal.Length, Species)) 
mytable <- mytable[1:12,] 


> mytable 
      Species 
Sepal.Length setosa versicolor virginica 
     4.3  1   0   0 
     4.4  3   0   0 
     4.5  1   0   0 
     4.6  4   0   0 
     4.7  2   0   0 
     4.8  5   0   0 
     4.9  4   1   1 
     5  8   2   0 
     5.1  8   1   0 
     5.2  3   1   0 
     5.3  1   0   0 
     5.4  5   1   0 

mylist <- list(1:3, 4:6, 7:9, 10:12) 

quartertable <- do.call(rbind, lapply(mylist, function(x) colSums(mytable[x,]))) 

> quartertable 
    setosa versicolor virginica 
[1,]  5   0   0 
[2,]  11   0   0 
[3,]  20   4   1 
[4,]  9   2   0 

これは次のようになります。dplyr

mylist <- list(1:3, 4:6, 7:9, 10:12) 

oil_quarters <- do.call(rbind, lapply(mylist, function(x) colSums(oil[x, ]))) 
0

、あなたのデータはdata.frameである場合は、

oil %>% 
    group_by(quarter = ceiling(Month/3)) %>% 
    select(-Month) %>% 
    summarise_each(funs(sum)) 

を行うことができ、これは

oil <- fread('Month 2014 2015 2016 2017 
    1 288458 293297 300915 331240 
    2 256340 259626 291915 281094 
    3 286934 298196 310038 311840 
    4 288002 281216 294659 307314 
    5 291004 294570 315600 329468 
    6 265109 288139 301625 307190 
    7 294363 296712 326494 305336 
    8 288878 305609 319990  0 
    9 275435 280736 305981  0 
    10 276658 274087 300671  0 
    11 270260 274532 308776  0 
    12 291463 302014 303563  0', header = T) 
として油で動作します