我正在尝试用R完全计算w / w的增长率。我可以使用excel,或者使用ruby进行预处理,但这不是重点。
data.frame示例
date gpv type
1 2013-04-01 12900 back office
2 2013-04-02 16232 back office
3 2013-04-03 10035 back office
我想通过'type'来做这个因素,我需要将Date类型列包装成几周。然后计算一周的一周增长。
我认为我需要按周进行分组 - 使用自定义函数来确定日期是否在给定的一周内?
然后,在此之后,使用diff
并找到增长b / w周除以前一周。
然后我将绘制周/周增长,或使用data.frame导出它。
这是closed但有相同的有用想法。
答案 0 :(得分:0)
更新:用ggplot回答:
如下所示,只需使用此代替plot
ggplot(data.frame(week=seq(length(gr)), gr), aes(x=week,y=gr*100)) + geom_point() + geom_smooth(method='loess') + coord_cartesian(xlim = c(.95, 10.05)) + scale_x_discrete() + ggtitle('week over week growth rate, from Apr 1') + ylab('growth rate %')
(旧的,正确的答案,但只使用情节)
嗯,我认为就是这样:
df_net <- ddply(df_all, .(date), summarise, gpv=sum(gpv)) # df_all has my daily data.
df_net$week_num <- strftime(df_net$date, "%U") #get the week # to 'group by' in ddply
df_weekly <- ddply(df_net, .(week_num), summarize, gpv=sum(gov))
gr <- diff(df_weekly$gpv)/df_weekly$gpv[-length(df_weekly$gpv)] #seems correct, but this I don't understand via: http://stackoverflow.com/questions/15356121/how-to-identify-the-virality-growth-rate-in-time-series-data-using-r
plot(gr, type='l', xlab='week #', ylab='growth rate percent', main='Week/Week Growth Rate')
那里有更好的解决方案吗?
答案 1 :(得分:0)
对于最后一部分,如果要计算增长率,可以先获取日志,然后使用diff,其默认参数为lag = 1(previos周),并且差= 1(第一次差):
df_weekly_log <- log(df_weekly)
gr <- diff(df_weekly_log , lag = 1, differences = 1)
后者是一个近似值,对小的差异有效。
希望有帮助。