Ниже приведены данные сетевого трафика для каждого часа десятидневного периода, как указано в наборе данных 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.Есть предложения по улучшению?