我正在尝试将我的 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
}
}
}
虽然成功,但我觉得必须有更好的方法(也许我缺少一个非常明显的解决方案)。
- 当矢量化方法可用时,我从不喜欢使用循环,尤其是嵌套 ifs - 即使有 100,000 多条记录,此代码也会变得非常慢
- 这种方法将变得不可能复杂到编码到更多的组(不一定是循环,而是 ifs)
- 需要预先订购色谱柱。可能无法绕过这个。
作为细微差别(不是说它有区别),但要求和的数据并不总是(或永远)是连续的整数。