对于R数据集中的以下十天的每个小时,我有以下网络流量数据。
Day Hour Volume Category
0 00 100 P2P
0 00 50 email
0 00 200 gaming
0 00 200 video
0 00 150 web
0 00 120 P2P
0 00 180 web
0 00 80 email
....
0 01 150 P2P
0 01 200 P2P
0 01 50 Web
...
...
10 23 100 web
10 23 200 email
10 23 300 gaming
10 23 300 gaming
如图所示,一小时内也会重复分类。我需要计算这些不同应用类别的波动率和高峰小时与平均小时比率。
波动率:每小时交易量的标准差除以小时平均值。
高峰时段平均小时比率:最大小时与体积的体积比。该申请的平均时数。
那么如何汇总和计算每个类别的这两个统计数据呢?我是R的新手,对如何聚合和获得所提到的平均值知之甚少。
因此,最终结果看起来像这样,首先通过对音量求和然后计算两个统计数据,在一个24小时内聚合每个类别的音量
Category Volatility Peak to Avg. Ratio
Web 0.55 1.5
P2P 0.30 2.1
email 0.6 1.7
gaming 0.4 2.9
编辑:plyr让我这么做。
stats = ddply(
.data = my_data
, .variables = .( Hour , Category)
, .fun = function(x){
to_return = data.frame(
volatility = sd((x$Volume)/mean(x$Volume))
, pa_ratio = max(x$Volume)/mean(x$Volume)
)
return( to_return )
}
)
但这不是我所希望的。我想要每个类别的统计数据,其中所有小时数首先汇总到24小时,然后汇总数量,然后计算波动率和PA比率。有任何改进建议吗?
答案 0 :(得分:1)
你需要分两个阶段进行(使用plyr
包):首先,正如你所指出的,同一类别可以有多个Day-Hour组合,所以我们首先聚合,因为每个类别,每小时内的总数,,无论当天:
df1 <- ddply( df, .(Hour, Category), summarise, Volume = sum(Volume))
然后你得到你的统计数据:
> ddply(df1, .(Category), summarise,
+ Volatility = sd(Volume)/mean(Volume),
+ PeakToAvg = max(Volume)/mean(Volume) )
Category Volatility PeakToAvg
1 P2P 0.3225399 1.228070
2 Web NA 1.000000
3 email 0.2999847 1.212121
4 gaming 0.7071068 1.500000
5 video NA 1.000000
6 web 0.7564398 1.534884