首页 文章

R总结到桶后,分配相同大小的桶

提问于
浏览
0

如何确定数量,使得每个组在求和后的大小相等?

下面是一个示例,它将数量分为10组,每组的项目数相同 .

set.seed(42)
    quantity <- c(runif(100, 0, 100))
    dat <- data.frame(
      qty = quantity,
      qtile = cut(quantity, quantile(quantity, seq(0, 1, 0.1)), 
      include.lowest = TRUE))
    dat <- dat %>% group_by(qtile) %>% summarise(qty = sum(qty))
    ggplot(dat, aes(qtile, qty)) + geom_bar(stat = 'identity')

但是我如何对这些组进行排序,以便在 summarise 步骤中 qty 变量将按组大致相等?

所以在这个例子中,总 qty5244.787 ,每个组在 summarise 之后都会有 524.4787 .

1 回答

  • 0

    这是我可以达到的目标 . 我觉得它大约适用于我的用例 . 如果其他人有好的改进想法,请随时更新答案 .

    set.seed(42)
    quantity <- c(runif(100, 0, 100))
    
    dat <- data.table(
      qty = quantity,
      wt = quantity
    )
    dat[!is.na(qty), avg := sum(wt) / 10]
    setorder(dat, qty, wt)
    dat[!is.na(qty), cum_wt := cumsum(wt)]
    dat[!is.na(qty), level := cum_wt / avg]
    dat[!is.na(qty), qtile := ceiling(level)]
    
    dat <- dat[, .(qty = sum(qty)), by = 'qtile']
    
    ggplot(dat, aes(qtile, qty)) + geom_bar(stat = 'identity')
    

相关问题