我想根据中心疾病控制定义计算累积和。 自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
计算累积和; 我想总结一下:
[(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
谢谢!
答案 0 :(得分:0)
您希望在多年内为选定的月份执行cumsum。我们不需要知道从哪里剔除数据的血腥细节。请给我们一个数据框。
首先,您需要将 年,月 分离到新的单独列中(如果您愿意,也可以保留日期)。您可以使用substr()
,因为您有固定的日期字符串格式,或者使用函数来计算日期类型的月份(只搜索SO)。这取决于你。
strsplit方法是:
df $ Year< - df $ Month< - NA //对于悲观主义,如果我们在字符串中有一些错过的月份 df $ Year< - substr(df $ Date,1,4) df $ Week< - substr(df $ Date,6,7) //您可以将Year,Week视为整数,或转换为factor,无论是什么使您的后续工作制表和绘图更容易。如果您希望Month表示为'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::filter
(或plyr::ddply
)感兴趣的月份。您的逻辑表达式为 Month %in% c(7,8,9)
,或 Month>=7 & Month <=9
当你说“为X年”时,你的意思是'过去所有年份'还是'对于某些可参数化的年份子集'?请编辑以澄清。
像 Month>=7 & Month <=9
这样的表达式要求您使用支持数字比较的日期类型,而不仅仅是dumb'=='。 (我建议无论如何,因为当它通常在x轴上理解日期时间类型时,绘图表现得更好)
然后做逐列的cumsum。 dplyr::summarize
或lapply
或colwise(cumsum)(col-of-interest)