将人员随机分配到不同规模的组和类别中

2023-12-31

我需要将人们随机分配到组和类别中。不幸的是,我真的不知道从哪里开始。我尝试使用下面的示例来解释我的问题。任何对此的帮助将不胜感激。

I have 207“A 型住宅”和408“B 型住宅”类别。总共有1524需要分配到 207 Home Type A 或 408 Home Type B 类别的人员。然而,这 1524 人还需要分为以下任一组:2 to 7适用于 A 型住宅或2 to 6适用于 B 型住宅。

最终结果应该是 1524 人被分配到 207 组(包含 2 到 7 人)和 408 组(包含 2 到 6 人)。

组的分配必须是随机的,并且可以使用所需组大小的任意组合,因为如果不使用组类别也没关系(例如,如果家庭类型 A 的 207 个组仅包含 2、3 个组,则可以)或一次 4 人,或另一次只有 5 和 7 人)。

我想象输出看起来像这样:

GroupSize <- c(2:7)
Num.Groups <- 0
Num.People <- 0
HouseTypeA <- data.frame(GroupSize, Num.Groups, Num.People)
GroupSize <- c(2:6)
HouseTypeB <- data.frame(GroupSize, Num.Groups, Num.People)

“Num.Groups”列的总和为 207 或 408,两个数据帧之间的“Num.People”总和为 1524。


我分三步尝试了这个:

  1. 制作房屋类型清单
  2. 将每个人分配到各个房屋,检查 有空间(类型 a 的 max=7,类型 b 的 max=6)
  3. 检查每间房子至少有 2 人。如果没有就抓一个人 从另一所房子,不允许他们的人数下降 低于 2。

    homeType=rep(c("a", "b"), times=c(207, 408))
    
    H <- vector(mode="list", length(homeType))
    for(i in seq(H)){
      H[[i]]$type <- homeType[i]
      H[[i]]$n <- 0
    }
    H
    
    # Place people in houses up to max number of people
    npeople <- 1524
    for(i in seq(npeople)){
      placed_in_house <- FALSE
      while(!placed_in_house){
        house_num <- sample(length(H), 1)
        if(H[[house_num]]$type == "a"){
          if(H[[house_num]]$n < 7){
            H[[house_num]]$n <- H[[house_num]]$n + 1
            placed_in_house <- TRUE
          }
        }
        if(H[[house_num]]$type == "b"){
          if(H[[house_num]]$n < 6){
            H[[house_num]]$n <- H[[house_num]]$n + 1
            placed_in_house <- TRUE
          }
        }
      }
    }
    H
    hist(unlist(lapply(H, function(x)x$n)))
    
    # move people around to get up to min number of people
    for(i in seq(H)){
      while(H[[i]]$n < 2){
        knock_on_door <- sample(length(H), 1)
        if( H[[knock_on_door]]$n > 2){
          H[[i]]$n <- H[[i]]$n + 1 # house i takes 1 person
          H[[knock_on_door]]$n <- H[[knock_on_door]]$n - 1 # house knock_on_door loses 1 person
        }
      }
    }
    H
    Ha <- H[which(lapply(H, function(x){x$type}) == "a")]
    Hb <- H[which(lapply(H, function(x){x$type}) == "b")]
    
    
    op <- par(mfcol=c(1,2))
    breaks=2:7
    hist(unlist(lapply(Ha, function(x)x$n)), breaks=breaks, col=8, xlab="people per house", main="type A") # 2:7
    hist(unlist(lapply(Hb, function(x)x$n)), breaks=breaks, col=8, xlab="people per house", main="type B") # 2:6
    par(op)
    
    sum(unlist(lapply(Ha, function(x)x$n))) + sum(unlist(lapply(Hb, function(x)x$n)))
    # [1] 1524
    
    
    Houses <- data.frame(
      Num.Groups = seq(H),
      type=unlist(lapply(H, function(x){x$type})),
      Num.People=unlist(lapply(H, function(x){x$n}))
    )
    head(Houses)
    

    正如您所看到的,每栋房子的总人数和分布情况是这样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将人员随机分配到不同规模的组和类别中 的相关文章

  • 在 r 中导出矩阵

    我想在 R 中导出一个矩阵 并保留行和列的名称 当我使用 write table 或 write csv 时 我得到一个带有新列的矩阵 我该如何使用这个功能 感谢您的帮助 您不会获得新列 行名称将保存为文本文件中的第一列 因此 您可以指定在
  • R 脚本自动化时的不同结果

    以下命令对 pdf 文件执行 Ghostscript 这pdf file变量包含该 pdf 的路径 bbox lt system paste C gs gs8 64 bin gswin32c exe sDEVICE bbox dNOPAUS
  • 替换列表列表中的元素

    The applyR 中的函数是简化 for 循环以获得输出的好方法 是否有一个等效的函数可以帮助人们在替换向量的值时避免 for 循环 通过示例可以更好地理解这一点 Take this list for example x list li
  • R 根据事件更新值

    我最近发布了这个问题 该问题已经与我在笔记本电脑上本地使用的 Mysql 数据库相关 由于我在 Mysql 中没有找到问题的解决方案 其他人似乎也没有找到解决方案 所以我想再次发布它 但现在与 R 相关 我使用带有 RMysql 包的数据库
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 返回数据帧 R 中的下一行

    我有一个看起来像这样的数据框 kind datetime book 2016 04 23 04 23 00 pen 2016 04 23 04 30 00 toy 2016 04 23 06 45 00 我想为数据集中的每一行返回下一行的日
  • ggplot2可以在一个图例中分别控制点大小和线大小(线宽)吗?

    一个使用的例子ggplot2绘制数据点组和连接每组均值的线 并使用相同的映射aes for shape并为linetype p lt ggplot mtcars aes gear mpg shape factor cyl linetype
  • 基于另一个数据集获取数据集的子集

    假设我有一个数据集 即 dat1 ID block plot SPID TotHeight 1 1 1 4 44 5 2 1 1 4 51 3 1 1 4 28 7 4 1 1 4 24 5 5 1 1 4 27 3 6 1 1 4 20
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 如何在 ggplot 中保持配色方案,同时删除每个图中未使用的级别?

    我想比较一个图中的数据的一些子组和另一图中的一些其他子组 如果我绘制一个图 其中绘制了所有子组 那么这个数字将是巨大的 并且每个单独的比较都会变得困难 我认为如果给定的子组在所有图中都具有相同的颜色 这对读者来说会更有意义 这是我尝试过的两
  • 是否可以通过扫描从控制台读取而不回显字符?

    这是一个示例函数 passwordEntry lt function cat Enter your password pwd lt scan n 1 what character quiet TRUE invisible pwd 并测试该功
  • kableExtra 中的 row_spec() 函数不会在 html 输出中创建水平线

    我想在 kableextra 表中的某一行下方添加一条水平线 row spec 函数的参数 hline after 应该在行下方添加水平线 row spec 文档 https www rdocumentation org packages
  • 如何用外部图像填充地图边界?

    我正在创建一张带有州边界的巴西地图 这可以直接使用ggplot2 and geom sf 然而 这一次 我不想用数据填充每个状态的颜色 而是想用外部图像 png 填充每个状态的边界 类似于this https online olivet e
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • R独特的列或行与NA无可比拟

    有谁知道如果incomparables的论证unique or duplicated 曾经被实施过incomparables FALSE 也许我不明白它应该如何工作 无论如何 我正在寻找一个巧妙的解决方案 以仅保留与另一列相同的唯一列 或行
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 将每列的值乘以 R 中另一个 data.frame 中的权重

    我有两个data frames df and weights 代码如下 df看起来像这样 id a b d EE f 1 this 0 23421153 0 02324956 0 5457353 0 73068586 0 5642554 2
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集

随机推荐