当前位置: 首页 > 知识库问答 >
问题:

随机分组以满足条件

长孙谦
2023-03-14

通过循环每个资源的名称,查看分配给该人员姓名的帐户,随机选择一个,并用NA替换该人员的姓名,以减少资源分配。

可复制示例:

Accts <- paste0("Acc", 1:200)
Value <- c(500, 2000, 5000, 1000)
AccountDF <- data.frame(Accts, Value)
AccountDF$Owner[1:200] <- NA
AccountDF$Owner[1:23] <- "Jeff"
AccountDF$Owner[24:37] <- "Alex"
AccountDF$Owner[38:61] <- "Steph"
AccountDF$Owner[62:111] <- "Matt"
AccountDF$Owner[112:141] <- "David"

library(dplyr)
OwnerDF <- AccountDF %>%
  group_by(Owner) %>%
  summarise(Count = n(),
            TotalValue = sum(Value)) %>%
  filter(!is.na(Owner))

我到目前为止的进展:

for (p in 1:nrow(OwnerDF)){
  while (AccountDF$Count[p] > 22){
    AccountDF %>%
      filter(Owner == OwnerDF$Owner[p]) %>%
      sample_n(1)


  }
}

我听说for循环是不必要的。我相信这可以通过purr包和pmap之类的东西来实现。我还在学习。

我想重复一下OwnerDF,看看那个人是否“拥有”了太多的账户。如果是,请查看原始帐户列表,随机选择一个,并将所有者的姓名替换为NA,从其计数中删除1,然后继续。

最后,在弄明白这一点后,我想看看它是否可以在多种条件下完成。。比如一会儿(伯爵)

共有1个答案

岳嘉良
2023-03-14

要选择随机账户,只需创建一个随机变量并对其进行排序,取符合条件的前N个账户:

 set.seed(1)
 res = AccountDF %>% 
   mutate(r = runif(n())) %>% 
   arrange(r) %>% 
   group_by(Owner) %>% 
   mutate(newOwner = replace(Owner, cumsum(Value) > 40000 | row_number() > 22, NA)) %>% 
   select(-r)

# Test that it worked...
res %>%
  filter(!is.na(newOwner)) %>%
  group_by(newOwner) %>%
  summarise(Count = n(), TotalValue = sum(Value))

# A tibble: 5 x 3
#   newOwner Count TotalValue
#      <chr> <int>      <dbl>
# 1     Alex    14      27000
# 2    David    18      37000
# 3     Jeff    18      39500
# 4     Matt    18      39500
# 5    Steph    17      36500

《任择议定书》在评论中提到的扩展:

另一个问题。假设我对每个值和计数都有一个阈值,如果有人计数低但价值高,我想从他们的高价值账户中随机取一个账户,如果他们计数高但价值低,我想取低价值账户远离他们。如何从随机的角度做到这一点?

我可能会给每个观察值分配一个真实值的分数,比如...

s = scale(f(x))

其中f是基于您提到的条件(高计数,高值或两者兼而有之)的函数,当您希望偏向于低值时,可能像x-x一样简单偏向于高价值。

然后,添加一些噪声,并使用上面的结果进行排序:

r = s + rnorm(length(s))
 类似资料:
  • 如果输入的len()少于10个字符,则调用子函数“tester”的默认值“太短”。 我下面的代码在一定程度上有效。我需要帮助,这样用户可以一次又一次地输入,直到他们键入'quit',在该命令终止时,终端中没有给出任何输出。传接球不起作用,我不知道该在哪里Rest。 我尝试了一段时间,真的,有回报,但我不能再跟随了。

  • 5.5公告,随机分组 电脑端暂不支持发布公告和随机分组活动,需要在手机APP端操作,具体操作请查看【APP指南-老师版手册】。

  • 问题内容: 我在SQL Server中具有以下数据结构表: 等等。 我需要做的是获取所有连续的日子,其中Allocation = 0,并采用以下形式: 等等。 可以在SQL中执行此操作吗?如果可以,如何执行? 问题答案: 在此答案中,我将假定“ id”字段按递增日期进行排序时,对行进行连续编号,就像示例数据中所做的那样。(如果不存在,则可以创建这样的列)。 这是此处和此处描述的技术示例。 1)在相

  • 问题内容: 使用以下模型: 如果我要查找包含至少一篇文章的订单操作,则可以按预期工作: 但是,如果要查找订单中所有商品的订单操作,正确的方法是什么? 引发错误(我理解为什么会这样)。 问题答案: 一个简单的解决方案: 这只是一个查询,但每篇文章都有一个内部联接。对于多篇文章,Willem更巧妙的解决方案应该会表现更好。

  • 问题内容: 我可以依靠地图的随机迭代顺序在Web应用程序中实现客户端的随机“配对”吗?我试过环顾四周,但似乎找不到这种随机性有多大的细分。 该算法将类似于: 当连接的客户端> 1000个时,这是否足够?还是应该维护一个单独的客户端片段并从中随机选择? 问题答案: 尽管它说是随机的(随机的)(spec,blog,hashmap源,另一个blog,SO),但分布远非完美。 为什么?因为我们喜欢地图 快

  • 我正在通过CodingBat解决以下问题: 给定一个整数数组,是否可以将整数分成两组,使一组的和为10的倍数,另一组的和为奇数。每个int必须在一个组或另一个组中。编写一个递归助手方法,该方法接受您喜欢的任何参数,并从splitOdd10()对递归助手进行初始调用。(不需要循环。) 我在SO上找到了一篇文章,讨论了一个类似的话题:是否有可能将一个数组分成两个具有相等乘积的数组,并尝试通过类比编写代