0

我想根据疾病控制中心的定义计算累积和。从 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
  • 您想在多年的选定月份执行 cumsum。我们不需要知道从何处剔除数据的血腥细节。只需给我们一个数据框。

  • 首先,您需要将年、月分离到新的单独列中(如果您愿意,也可以保留日期)。您可以使用substr(),因为您有固定的日期字符串格式,或者使用函数从您的日期类型计算月份(只需搜索 SO)。这取决于你。

  • strsplit 方法是:

    df$Year <- df$Month <- NA // 悲观主义,以防我们在字符串中缺少月份 df$Year <- substr(df$Date,1,4) df$Week <- substr(df$Date ,6,7) // 您可以将年、周保留为整数,或转换为因子,这可以使您的后续工作制表和绘图更容易。如果您希望将月份表示为“00”、“01”,请使用带有字符串级别的因子或字符串。或者在打印时使用 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::filterplyr::ddply)感兴趣的月份。您的逻辑表达式将是Month %in% c(7,8,9)or elseMonth>=7 & Month <=9

  • 当您说“X 年”时,您的意思是“所有年份”还是“某些可参数化的年份子集”?请编辑以澄清。

  • 像这样的表达式Month>=7 & Month <=9将要求您使用支持数值比较的日期类型,而不仅仅是愚蠢的“==”。(无论如何,我建议这样做,因为当它通常在 x 轴上理解日期时间类型时,绘图表现得更好)

  • 然后按列进行cumsum。要么dplyr::summarize, 要么lapply, 要么colwise(cumsum)(col-of-interest)

  • 我想你想要这个数据框底部的新行“Cumsum”中的所有 cumsum?或者,如果它不是数据框,请让您的生活变得轻松并使其成为数据框,以便您可以添加行名为“Cumsum”的底行。
  • 完毕。我推荐 dplyr (目前最活跃的开发和最高性能的库,如果你进展到更难的东西,你的代码将具有很好的可扩展性),但对于这个相当简单的任务来说,它可能是矫枉过正,这取决于你。
于 2014-04-29T05:44:37.487 回答