如何确定数量,使得每个组在求和后的大小相同?
下面是一个示例,它将数量分为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
变量大致相等?
因此,在此示例中,总qty
为5244.787
,每个群组在524.4787
之后将summarise
。
答案 0 :(得分: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')