R:在朋友组中最佳地共享 Cookie

2023-11-24

我正在使用 R 编程语言。

假设有 100 人 - 每个人都用 1:100 开始的 ID 表示。每个人都可以与其他人成为朋友。数据集可以用图形/网络格式表示,如下所示:

# Set the seed for reproducibility
set.seed(123)

# Generate a vector of ID's from 1 to 100
ids <- 1:100

# Initialize an empty data frame to store the "from" and "to" values
edges <- data.frame(from=integer(), to=integer(), stringsAsFactors=FALSE)

# Iterate through the ID's
for(id in ids) {
    # Randomly select a minimum of 1 and a maximum of 8 neighbors for the current ID
    neighbors <- sample(ids[ids != id], size=sample(1:8, size=1))
    
    # Add a new row to the data frame for each "to" value
    for(neighbor in neighbors) {
        edges <- rbind(edges, data.frame(from=id, to=neighbor))
    }
}

正如我们所看到的,数据可以可视化以揭示图形/网络格式:

library(igraph)
library(visNetwork)


# Convert the data frame to an igraph object
g <- graph_from_data_frame(edges, directed=FALSE)

# Plot the graph
plot(g)

# Optional visualization
#visIgraph(g)

enter image description here

现在,假设该数据集中的每个人都有一定数量的 cookie。这看起来像这样:

set.seed(123)

cookies = data.frame(id = 1:100, number_of_cookies = c(abs(as.integer(rnorm(25, 15, 5))), abs(as.integer(rnorm(75, 5, 5)))))
                 

这是我的问题:

  • 我想确保这个数据集中没有人拥有少于 12 个 cookie - 也就是说,如果某人拥有少于 12 个 cookie,他们可以将他们的 cookie 与邻居(例如一级邻居、二级邻居)“汇集”在一起, ... n 级邻居 ... 直到满足这个条件),看看他们现在是否有超过 12 个 cookie
  • 但是,我还想确保在此池化过程中,池化的朋友组中没有超过 20 个 cookie(即,这可能需要“取消池化”之前池化在一起的邻居)
  • 最后,如果某人与其他人在一个组中 - 那么这个人不能被放入另一个组中(即没有“双重浸入”)

我编写了一个函数,它接受一个 ID 作为输入,然后返回该 ID 以及该 ID 的所有邻居的 cookie 总数:

library(data.table)
library(dplyr)


sum_cookies_for_id <- function(id) {
    
    # Get the connected IDs for the given ID
    connected_ids <- c(id, edges[edges$from == id | edges$to == id, "to"])
    
    # Sum the number of cookies for all connected IDs
    sum(cookies[cookies$id %in% connected_ids, "number_of_cookies"])
}

# Test the function
sum_cookies_for_id(23)

但除此之外,我不知道如何继续。

有人可以告诉我如何继续为这个问题编写代码吗?在这样的例子中可以使用动态规划吗?

Thanks!

Notes:

  • 我认为这个问题可能具有“随机”性质 - 也就是说,取决于您从哪个 ID 开始以及您将此特定 ID 与哪个其他 ID 分组......最终可能会导致更少或更多的人拥有少于 12 个 cookie
  • 我认为编写一个执行随机分组的“贪婪”算法可能是解决此类问题的最简单选择?
  • 将来,我有兴趣看看如何更“复杂的算法”(例如遗传算法) 可用于进行分组,以便留下少于 12 个 cookie 的最少人数。
  • 思考:在考虑这些总/总和约束的同时,是否有可能使用一些预先存在的图/网络聚类算法来解决这个问题(例如 Louvain 社区检测)?

None

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

R:在朋友组中最佳地共享 Cookie 的相关文章

  • R:变换不规则时间字符串

    我有两个不同的时间序列 来自不同的数据帧 具有不同的不规则格式 但问题是相同的 我只想提取小时 分钟 秒和毫秒 时代系列看起来像这样 ts1 08 27 23 445 08 27 24 280 08 27 25 115 I tried st
  • 从 R 主题模型中的 DocumentTermMatrix 中删除空文档?

    我正在使用 R 中的 topicmodels 包进行主题建模 我正在创建一个 Corpus 对象 进行一些基本的预处理 然后创建一个 DocumentTermMatrix corpus lt Corpus VectorSource vec
  • 尽管提供了群落矩阵,纯素食 DBRDA 物种得分为空

    我使用纯素社区生态包在 R 中执行了 基于距离的冗余分析 dbRDA 我想在 dbRDA 结果的排序图中显示 鱼类 营养群体对样本之间差异 营养级鱼类组合的丰度数据 的相对贡献 IE 将箭头和营养级组名称叠加到排序图上 其中箭头线的长度表示
  • 在 R 中读取 Stata 13 文件

    有没有办法在 R 中读取 Stata 版本 13 数据集文件 我尝试执行以下操作 gt library foreign gt data read dta TEAdataSTATA dta 但是 我收到一个错误 read dta TEAdat
  • 用 HashMap[Int, Vector[Int]] (Scala) 表示图(邻接列表)?

    我想知道如何 如果可能的话 我可以通过以下方式制作 可变 图的邻接列表表示HashMap Int Vector Int HashMap当然是可变的 目前我将其设置为HashMap Int ArrayBuffer Int 但我可以更改 Arr
  • R比例置信区间因子

    我正在尝试总结家庭调查的数据 因此我的大部分数据都是分类 因子 数据 我想用对某些问题的回答频率图来总结它 例如 回答某些问题的家庭百分比的条形图 误差线显示置信区间 我发现了这个很棒的教程 我认为它是我祈祷的答案 http www coo
  • 仅在具有重复块名称的另一个 Rmarkdown 文档中运行一个 Rmarkdown 文档中的代码

    我正在 Rmarkdown 中编写一系列相互补充的报告 我想将上一份报告的结果纳入我目前正在编写的报告中 我看到其他建议使用的问题purl从 Rmarkdown 文档中提取 R 代码然后运行它 所以我尝试了以下操作 r read previ
  • 如何在 R 地图库中绘制正确的颜色

    我正在尝试使用 R 地图库为特定国家绘制特定颜色 我可以填写颜色 但它们与各自的国家 地区没有正确关联 我想知道是否有人能知道为什么 我的数据框是 filld 有 3 列 第一列是国家名称 第二列只是一些数字数据 第三列是颜色 countr
  • 如何用日语创建 ggplot2 标题?

    我正在准备日语演示文稿 并希望图像的标题和图例名称为日语 我可以让文本在 RStudio 中渲染得很好 但是当渲染图像时 日语字符仅显示为方框 x 10 10 y x x df data frame x y ggplot df aes x
  • 广度优先搜索:检查访问状态的时机

    在有向图的广度优先搜索中 可能循环 当一个节点出队时 其所有尚未访问的子节点都会入队 并且该过程将继续 直到队列为空 有一次 我以相反的方式实现它 将节点的所有子节点排队 并在节点出队时检查访问状态 如果正在出队的节点之前已被访问过 则该节
  • R:使用管道将单个参数传递到函数中的多个位置

    我试图专门使用管道来重写以下代码 使用babynames包中的babynames数据 library babynames library dplyr myDF lt babynames gt group by year gt summari
  • 在 R 中修改传单弹出窗口

    我想修改 R 中传单弹出窗口的外观 帮助文件指出 in the popupOptions 函数需要 传递给底层 Javascript 对象构造函数的额外选项 In 这个例子 https rstudio github io leaflet p
  • 如何使用r中的dplyr在特定位置插入空白行

    我想在数据框中的特定位置插入空白行 我的数据框是这样的 dat lt data frame group c rep A 1 rep B 4 rep C 2 rep D 2 group 1 A 2 B 3 B 4 B 5 B 6 C 7 C
  • 无法在 Powershell 中运行 R.exe

    我经常发现在命令行 Windows 上运行 R 更有用 然而 当我在 Powershell 中尝试时 我往往会遇到问题 但这可以通过第一次运行轻松克服cmd然后就可以了 这是我执行此操作时遇到的错误R CMD BATCH Invoke Hi
  • 在 R Shiny 中显示/隐藏整个框元素

    我目前正在尝试找到一种方法来隐藏 显示 R Shiny 中的整个 box 元素 以及里面的所有内容 我想创建一个可能的按钮 它允许用户展开特定框 然后使用相同 甚至不同 的按钮隐藏它 我不想使用条件面板 因为我的应用程序非常大并且会产生一些
  • 如何根据查找表匹配多列

    我有以下两个数据框 lookup lt data frame id c A B C price c 1 2 3 results lt data frame price 1 c 2 2 1 price 2 c 3 1 1 我现在想要浏览所有列
  • 一次评论多个对象

    假设您有一个变量 a 到 j 的列表 for x in 1 10 assign letters x x 您将如何评论那些最近创建的对象 我尝试过类似的事情 for x in 1 10 comment get letters x lt pas
  • 使用 matplotlib.animation 从 CSV 文件实时绘图 - 数据绘制到第一个输入错误

    我正在尝试绘制来自不断写入 CSV 文件的传感器的数据 虽然成功创建实时绘图 但每个新数据条目都会创建一条延伸到第一个数据条目的附加线 见下文 Python 3 4 脚本 import matplotlib pyplot as plt im
  • R Shiny - 使用 DataTable 移动列名称

    我有一个非常复杂的闪亮代码 其中有几个面板和这些面板内的几个表格 启动应用程序时 列名称与列值正确对齐 但是 一旦我更改应用程序表格下的页码 列名称就会移动到左侧 而值仍保留在中间 如何强制应用程序使列名称与列值对齐 一个可重现的例子 li
  • R - 如何为数据范围内的缺失值绘制条形图零点?

    假设我对 1 到 10 之间的整数的 200 个点有 10 个观察值 mysample sample rep seq 1 10 20 10 我想用条形图绘制它 barplot table mysample barplot https i s

随机推荐