【发布时间】:2015-04-02 23:28:03
【问题描述】:
我正在尝试将我的 data.frame/data.table 的一列分成三组,总和相等。
数据首先从小到大排序,这样第一组将由大量具有小值的行组成,而第三组将由少量具有大值的行组成。这是通过以下精神实现的:
test <- data.frame(x = as.numeric(1:100000))
store <- 0
total <- sum(test$x)
for(i in 1:100000){
store <- store + test$x[i]
if(store < total/3){
test$y[i] <- 1
} else {
if(store < 2*total/3){
test$y[i] <- 2
} else {
test$y[i] <- 3
}
}
}
虽然成功,但我觉得必须有更好的方法(也许是我缺少的一个非常明显的解决方案)。
- 当矢量化方法可用时,我从不喜欢使用循环,尤其是使用嵌套 if 时 - 即使有 100,000 多条记录,这段代码也会变得非常慢
- 这种方法会变得非常复杂,无法编码到大量组(不一定是循环,而是 ifs)
- 需要预先订购该列。可能无法解决这个问题。
作为一个细微差别(并不是说它有区别),但要求和的数据并不总是(或永远)是连续的整数。
【问题讨论】:
-
我认为预订实际上破坏了平等分配,因为当您获得更高的价值时,您拥有的就是大尺寸的物品。
-
BondedDust - 公平点,但这就是我们想要的。我想要一个相等的总和分配,将最小值、中值和最大值组合在一起
标签: r bin-packing