我在下面的网络流量数据为十天期间的每一个小时如下在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正如所见,在一个小时内也有重复的类别。我需要计算这些不同应用类别的波动率和高峰时间与平均小时的比率。
波动性:每小时成交量除以小时平均值的标准差。
高峰时刻到avg。小时比率:最大小时与第一卷的体积之比。申请的平均时间。
那么,我如何对每个类别进行汇总和计算这两个统计呢?我对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编辑:普莱尔把我弄到这个地步了。
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比率计算。有改进的建议吗?
发布于 2011-02-20 22:15:00
您需要分两个阶段(使用plyr包):首先,正如您所指出的,对于同一类别,可以有多个日时组合,因此我们首先对每个类别在每小时内汇总其总数,而不管是哪一天。
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.534884https://stackoverflow.com/questions/5059869
复制相似问题