0

Center Disease Control の定義に従って、累積合計を計算したいと思います。2008 年から現在までの 25 地区の週次データがあります。

          Site1   Site2    Site3  Site4  Site5   Site6   Site7   Site8   Site9
2011-45 1   1   1   1   2   2   1   1   1
2011-46 1   1   1   1   1   2   1   2   3
2011-47 2   1   1   1   1   3   1   2   1
2011-48 1   1   1   1   2   2   3   2   1
2011-49 1   1   1   1   1   2   1   3   2
2011-50 1   1   1   1   1   4   1   1   1
2011-51 1   1   1   1   1   1   1   1   1
2011-52 1   1   1   1   1   2   2   2   2
2012-01 1   1   1   3   2   4   1   1   1
2012-02 1   1   2   1   1   2   1   3   3
2012-03 1   2   1   1   1   2   1   1   2
2012-04 3   1   2   1   1   3   1   2   1
2012-05 1   1   2   1   1   2   1   2   2
2012-06 3   1   2   1   1   5   1   2   2
2012-07 1   1   1   1   1   2   NA  2   1
2012-08 1   2   6   1   1   4   1   4   2
2012-09 3   1   2   1   1   1   1   4   2
…   …   …   …   …   …   …   …   …   …
…   …   …   …   …   …   …   …   …   …
…   …   …   …   …   …   …   …   …   …
2012-45 7   2   1   NA  1   22  NA  17  1
2012-46 4   1   NA  1   1   13  NA  7   1
2012-47 2   1   1   1   1   39  1   12  1
2012-48 4   1   2   NA  1   24  1   8   1
2012-49 1   1   1   1   1   19  1   5   1
2012-50 2   1   2   1   2   17  2   1   2
2012-51 7   1   1   1   1   21  1   3   1
2012-52 1   1   2   1   1   5   1   11  1
2012-53 NA  NA  NA  NA  NA  NA  1   NA  NA
2013-00 6   1   1   1   1   11  1   6   1
2013-01 7   2   3   1   1   58  1   18  2
2013-02 3   2   2   1   3   53  1   27  2
2013-03 1   2   2   1   1   21  1   9   1
2013-04 2   1   1   1   1   14  1   6   3
2013-05 3   1   1   1   1   10  1   3   1
2013-06 NA  2   3   1   1   16  1   8   1
2013-07 16  1   4   1   1   22  1   8   3
2013-08 10  2   6   1   1   19  1   11  1
2013-09 13  1   3   1   2   31  1   7   1
…   …   …   …   …   …   …   …   …   …
…   …   …   …   …   …   …   …   …   …
…   …   …   …   …   …   …   …   …   …
2013-45 2   1   1   1   1   15  NA  6   1
2013-46 2   2   1   1   1   5   1   2   1
2013-47 3   1   1   1   2   12  1   2   1
2013-48 3   1   1   1   1   2   2   1   1
2013-49 1   2   1   1   1   7   1   NA  2
2013-50 2   2   1   1   1   1   1   1   1
2013-51 NA  1   1   1   1   8   1   2   1
2013-52 NA  2   1   1   1   4   1   2   1
2014-00 NA  1   1   1   1   4   1   1   1
2014-01 NA  2   3   1   1   3   1   1   1
2014-02 NA  3   1   1   2   6   1   1   2
2014-03 NA  1   1   1   1   3   1   1   2
2014-04 NA  1   1   1   1   3   1   1   2
2014-05 1   2   1   1   1   1   1   1   1
2014-06 1   2   1   1   1   1   1   1   1
2014-07 1   2   1   1   1   1   1   1   1
2014-08 1   2   1   1   1   1   1   1   1
2014-09 1   2   1   1   1   1   1   1   1

Cum-sum を計算するには; 合計したい:

[(2014-07 + 2014-08 + 2014-09)+(2013-07 + 2013-08 + 2013-09)+...for X year] /weeks number                                 
                                        +

[(2014-08 + 2014-09 + 2014-10)+(2013-08 + 2013-09 + 2013-10)+...for X year] /week number                                  
                                        +

[(2014-09 + 2014-10 + 2014-11)+(2013-09 + 2013-10 + 2013-11)+...for X year] /weeks number 

                                        +

[(2014-10 + 2014-11 + 2014-12)+(2013-10 + 2013-11 + 2013-12)+...for X year] /weeks number

ありがとう!

4

1 に答える 1

0
  • 複数の年にわたる選択した月の累計を実行したいと考えています。データがどこから抽出されたのか、詳細を知る必要はありません。データフレームを提供してください。

  • 最初に、年、月を新しい別々の列に分ける必要があります (必要に応じて、日付も保持します)。substr()固定の日付文字列形式を使用するか、関数を使用して日付型から月を計算することができます(SO を検索するだけです)。それはあなた次第です。

  • strsplit アプローチは次のとおりです。

    df$Year <- df$Month <- NA // 悲観主義のため、文字列に月が欠けている場合に備えて df$Year <- substr(df$Date,1,4) df$Week <- substr(df$Date ,6,7) // 年、週を整数のままにしておくことも、係数に変換することもできます。これにより、その後の作業の集計とプロットが容易になります。月を '00'、'01' として表す場合は、文字列レベルまたは文字列で factor を使用します。または、印刷するたびに format/printf を使用します。

  • (PS データには週番号 00..53 があり、年の初め/終わりに部分的な週があるようです。このエントリを再確認してください。セグメント 2012-53 を削除する必要があるかもしれません:

    2012-53 NA NA NA NA NA NA 1 NA NA 2013-00 6 1 1 1 1 11 1 6 1

  • subset()次に、論理インデックスdplyr::filter(またはplyr::ddply) を対象の月に使用します。あなたの論理式はMonth %in% c(7,8,9)or elseになりますMonth>=7 & Month <=9

  • 「X 年間」と言うとき、「すべての年にわたって」または「パラメーター化可能な年のサブセット」を意味していましたか? 明確にするために編集してください。

  • のようなMonth>=7 & Month <=9式では、単純な「==」ではなく、数値比較をサポートする日付タイプを使用する必要があります。(とにかく、x軸で慣習的に日時型を理解すると、プロットがより適切に動作するため、それをお勧めします)

  • 次に、列ごとの累積を行います。dplyr::summarize、または、lapplyまたはcolwise(cumsum)(col-of-interest)

  • このデータフレームの下部にある新しい行 'Cumsum' にすべての cumsum が必要だと思いますか? または、データフレームでない場合は、簡単にデータフレームにして、行名が「Cumsum」の一番下の行を追加できるようにします。
  • 終わり。私は dplyr をお勧めします (現在、最も活発な開発と最もパフォーマンスの高いライブラリです。より難しいものに進んだ場合、コードは美しく拡張可能になります) が、このかなり単純なタスクにはやり過ぎかもしれません。
于 2014-04-29T05:44:37.487 に答える