问题标签 [tidygraph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 如何(有效地)从访问过的地方列表中构建边缘列表?
我的原件data.table
由三栏组成。
site
,observation_number
和id
.
例如,以下是 id = z 的所有观察结果
这意味着 IDz
已经从a
到b
到c
。
每个 ID 没有固定数量的站点。
我希望将数据转换为这样的边缘列表
模拟数据
我目前这样做的方式感觉很复杂而且很慢(sox 有 1.5 mio 行,dt_out 有 ca. 7.5 mio. rows)。我基本上使用 for 循环observation_number
将数据拆分为每个 ID 仅存在一次的块(即 - 只有一次旅程,到 - 从)。然后我投射数据,并将所有块剥离到一个新的 data.table 中。
我希望有人能帮我优化这个,最好创建一个函数,我可以在其中输入 data.table、站点 id、observationnumber id 和 id。出于某种原因,不管它是否有效,我都无法创建一个函数。
更新
使用系统时间(并运行系统时间几次):
ps make_edgelist 已更新以订购 data.table
我很惊讶 dplyr (with lead
) 几乎和 make_edgelist 一样快,并且比 data.table with 快得多shift
。我想这意味着 dplyr 实际上会更快,因为更复杂的领先/滞后/移位。
我也觉得它令人费解 - 但不知道它是否有任何意义,dplyr 比两个 data.table 解决方案中的任何一个都使用了更多的“系统”时间。
输入数据:150 万行。结果:60 万行。
r - igraph中最低的共同祖先
假设我们有一棵树igraph
:
由reprex 包(v0.3.0)于 2019 年 12 月 21 日创建
我们如何找到任意节点集合的最低共同祖先(LCA)?也就是说,在上面的例子中
- 7 和 14 的 LCA 为 2。
- 6、9、12 和 14 的 LCA 为 1。
- 1 和 8 的 LCA 为 1。
- 任何节点的 LCA 都是它自己。
等等。
感觉应该有一种优雅的方式来做到这一点igraph
,但我还没有找到它。我玩弄了调用的交集all_simple_paths
,但是由于我没有获得每个节点级别的好方法,所以这没有帮助。
我知道许多系统发育包为其他数据结构实现 了这一点,但如果图表上有合理的解决方案,我宁愿避免相互转换。(不过,我对tidygraph
解决方案非常满意。)
r - 使用 tidygraph 和 ggraph 为单个节点着色
我有一个我绘制的 tidy_igraph 数据网络。但是,我想将图中的单个节点着色为与所有其他节点不同的颜色,因为它是图中的中心点。
我做了以下操作来制作一个带有颜色列的小标题:
现在我想将单个节点作为图层添加到 ggraph,如下所示:
r - 如何在 igraph 中获得“关节边缘”?
我正在尝试使用 igraph (和 tidygraph )及其函数来识别关节点之间的边缘articulation_points
。换句话说,我正在寻找我的图表中的边缘,如果切割会将图表一分为二。我的第一个猜测是,我需要做的就是将边缘过滤到from
和to
顶点都是关节点的边缘。不幸的是,我很快发现这是不够的,因为这种方法会标记边缘,如果在它们彼此相邻时切割它们不会分裂网络。这个“关节边缘”列表还有另一条路线吗?
这是我的(不正确的)逻辑。
我将尝试提出一个最小的网络,该网络具有这种逻辑失败的特性。敬请关注。
r - 是否可以调整 ggrgraph 中的相对节点大小?
新来的R
;在 with 的帮助下尽力呈现我的问题reprex
。
我有一个使用包的节点大小按度数的网络ggraph
。
绘制的网络看起来不太好,因为一些节点非常小。
我想增加节点的相对大小。
在igraph
中,我会增加节点的相对大小,例如:
我在ggraph
(在下面的 rerpex 中)尝试了类似的东西,但结果是度数的乘积,而不是节点相对大小的增加。
ggraph
如果只是因为整洁/语法方法和管理(哦,非常陡峭的)学习曲线,我想坚持使用该软件包(尽管如果有人对这两个软件包有一些想法,我可能会被说服)。
下面的示例没有附加图,因为我的声誉不够高,无法发布图像。但如果我做对了,reprex 应该做它应该做的事情。
由reprex 包(v0.3.0)于 2020-07-18 创建
r - 在数据框中查找 ID 的子 ID 的函数
我有一个包含两列的数据框,一个 ID 列和一个具有与相应 ID 相关的子 ID 的列。子 ID 可以再次具有子 ID(在这种情况下,以前的子 ID 现在是一个 ID)。
我想编写一个函数来查找与 ID 相关的所有子 ID。它应该返回一个包含所有子 ID 的向量。
这与我迄今为止在 R 中所做的一切都非常不同,我很难为这个问题写一个好的标题。因此,如果使用正确的措辞,我可能已经通过谷歌搜索找到了答案。
我解决这个问题的第一个直觉是 while 循环。由于我也不知道可能有多少子级别,因此该功能应继续执行,直到找到所有子级别。我从来没有使用过while循环,也不知道如何在这里实现它们。
也许有人知道解决这个问题的好方法。谢谢!
编辑:忘记将 tibble 分配给 df 并在函数调用中使用此参数。