3

我在以下 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 )
    }
)

但这不是我所希望的。我想要每个类别的统计数据,其中一天中的所有时间首先通过对交易量求和然后计算波动率和 PA 比率来聚合为 24 小时。有什么改进的建议吗?

4

1 回答 1

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
于 2011-02-20T22:15:00.577 回答