r - 跨多个类别进行分箱

标签 r

我正在尝试为我们的 6 台备份服务器创建一个备份持续时间的文本输出,这些备份持续时间被分类为 30 分钟增量箱。输入数据(称为newdata)的示例如下:

      backup_server   client      duration  
1     bkp01           server_A    60       
2     bkp01           server_A    34       
3     bkp01           server_A    230     
4     bkp02           server_A    14      
5     bkp02           server_C    29   
6     bkp02           server_C    62

现在我已经能够将所有东西与以下内容一起存放:

br.br <-seq(0,max(newdata$duration),by=30)
cbind(table(cut(newdata$duration,br.br,right=FALSE)))

它提供了这种输出:

                    [,1]
[0,30)              3523
[30,60)             1394
[60,90)              230
[90,120)              35
[120,150)             10
[150,180)              0
[180,210)              3

我希望看到的是这样的:

[,1]                bkp01      bkp02
[0,30)               523        422
[30,60)              394         30
[60,90)              130         10
[90,120)               5          3
[120,150)              1          2
[150,180)              0         10
[180,210)              2         20

我得到的最接近的是使用聚合函数,但并没有真正满足我的需要。

> aggregate(newdata$Duration, by=list(newdata$TSM_server),FUN=mean)
  Group.1        x
1 bkp01       31.13307
2 bkp02       16.58491

最佳答案

如果这不是您想要的(通过将 @joran 的解决方案与我的解决方案进行比较,您应该会发现关于所需的汇总度量存在相当大的模糊性需要解决)....

 aggregate(newdata$Duration, 
           by=list(dur.cut=cut(newdata$duration,br.br,right=FALSE) , 
                   server=newdata$TSM_server),
            FUN=mean) 

然后试试这个:

 tapply( newdata$Duration, 
           INDEX=list(dur.cut=cut(newdata$duration,br.br,right=FALSE) , 
                   server=newdata$TSM_server),
            FUN=mean)

有时设置INDEX= interaction(var1, var2)产生略有不同但有时更理想的结果。 (在测试这些时,我确实观察到列名称与您的示例不同。)

 aggregate(newdata$duration, 
            by=list(dur.cut=cut(newdata$duration,br.br,right=FALSE) , 
                    server=newdata$backup_server),
             FUN=mean)
#------------
  dur.cut server    x
1 [30,60)  bkp01 34.0
2 [60,90)  bkp01 60.0
3  [0,30)  bkp02 21.5
4 [60,90)  bkp02 62.0

 tapply( newdata$duration, 
            INDEX=list(dur.cut=cut(newdata$duration,br.br,right=FALSE) , 
                    server=newdata$backup_server),
             FUN=mean)
#-------------
           server
dur.cut     bkp01 bkp02
  [0,30)       NA  21.5
  [30,60)      34    NA
  [60,90)      60  62.0
  [90,120)     NA    NA
  [120,150)    NA    NA
  [150,180)    NA    NA
  [180,210)    NA    NA

关于r - 跨多个类别进行分箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13866472/

相关文章:

r - 如何降低R绘图函数中x轴的步长?

r - 将字符串转换为R中的变量

r - MonetDB 是否支持> 70k 列的表

r - data.table中因素之间的相互作用

r - R 中的 image.plot 不显示色阶边缘的色阶值

r - 不平衡数据集上的 2 向方差分析

r - 在barplot ggplot中手动设置每组颜色

r - 在 Shiny App 中训练模型时显示加载标志

r - 为什么这个循环的时间复杂度是非线性的?

html - 从 shinyincubator 自定义 matrixInput 函数以删除 +/- 并显示列名