r - 将一组整数分成两个大致相同太阳的子组
问题描述
我有一组整数,如下所示R
data.frame
:
set.seed(1)
df <- data.frame(id = paste0("id",1:100), length = as.integer(runif(100,10000,1000000)), stringsAsFactors = F)
所以每个元素都有一个id
和一个length
。
我想将 df 拆分为两个data.frame
s,其总和大致相等length
。
知道R
实现这一目标的功能吗?
我认为这Hmisc
可能cut2
会这样做,但我认为这不是它的预期用途:
library(Hmisc) # cut2
ll <- split(df, cut2(df$length, g=2))
> sum(ll[[1]]$length)
[1] 14702139
> sum(ll[[2]]$length)
[1] 37564671
解决方案
这称为 Bin 包问题。https://en.wikipedia.org/wiki/Bin_packing_problem这个链接可能会有所帮助。
使用BBmisc::binPack
功能,
df$bins <- binPack(df$length, sum(df$length)/2 + 1)
tapply(df$length, df$bins, sum)
结果像
1 2 3
25019106 24994566 26346
现在既然你想要两组,
dummy$bins[dummy$bins == 3] <- 2 #because labeled as 2's sum is smaller
结果是
1 2
25019106 25020912
推荐阅读
- asp.net-core - 通过需要一段时间传播的图表来解决 Azure B2C AD 声明更新的方法?
- python - 如何为以下 json 定义 json 模式?
- javascript - 如何显示从firebase检索到的数据到标题标签
- typescript - 如果未定义,则连接数组
- .net - 可以在 Mac 上使用旧版 .NET 框架代码库吗?
- express - Socket.io - 有没有办法保存 socketid 以防止生成新的
- sql-server-2012 - 如何通过 Spark DataFrame 使用 Databricks 使用 Service Principle 将批量数据插入 Sql Server 数据仓库
- opengl - 顺序无关的透明度 - 内存屏障
- c# - 如何使用文本框获取列表视图的选定项目
- devexpress-wpf - 如何在 GridControl 中显示所有继承的接口