代码之家  ›  专栏  ›  技术社区  ›  Julien Massardier

基于另一个变量的偶数切割

cut r
  •  0
  • Julien Massardier  · 技术社区  · 7 年前

    我们如何使1个变量的切割确保这些切割的另一个变量的和是偶数?

    例如

    我想让var2的和在两次切割之间更均匀

    代码:

    库(data.table)
    dt=数据表(var1=c(0.6,0.2,0.5,0.8,0.10,0.1,0.2,0.5,0.3,0.5),
    var2=c(20400350,5010049012009001850,70)
    dt[,切割:=切割(dt$var1,断裂=3)]
    dt[,(var2=sum(var2)),by=cuts]
    

    谢谢!

    enter image description here

    代码:

    library(data.table)
    dt = data.table(var1=c(0.6,0.2,0.5,0.8,0.10,0.1,0.2,0.5,0.3,0.5),
                    var2=c(20,400,350,50,100,490,1200,900,1850,70))
    dt[,cuts:=cut(dt$var1,breaks=3)]
    dt[,.(var2=sum(var2)),by=cuts]
    

    谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Esther    7 年前

    一种方法是创建一个向量 var1 按比例表示的值 var2 值,然后使用该向量创建相等的箱,例如,

    library(data.table)
    library(Hmisc)
    
    dt = data.table(var1=c(0.6,0.2,0.5,0.8,0.10,0.1,0.2,0.5,0.3,0.5),
                    var2=c(20,400,350,50,100,490,1200,900,1850,70))
    
    dt[,var3:=round(var2/min(var2))]
    
    cc = rep(dt[,var1], dt[,var3])
    
    labs = cut2(cc, g=3, onlycuts = TRUE)
    
    dt[,cuts:=cut2(var1, cuts=labs)]
    
    dt[,.(var2=sum(var2)),by=cuts]
    
    #         cuts var2
    # 1: [0.5,0.8] 1390
    # 2: [0.1,0.3) 2190
    # 3:       0.3 1850