r - 如何从数据框创建边缘列表(展开,group_by?)
问题描述
我在 R 中有一个类似于以下内容的数据框:
INSTITUTION GROUP
University1 Group1
University1 Group1
University3 Group2
University4 Group2
University1 Group2
University3 Group3
我的目的是创建一个边缘列表,以在 igraph 中创建一个网络,其中包含各自组内机构之间所有可能的连接。这个想法是关系不会重复。它看起来像这样(我假设):
EDGE1 EDGE2
University1 University1 # for group 1
University3 University4 # for group 2
University3 University1 # for group 2
University4 University1 # for group 2
# and I assume that group 3 would not have an edge represented because it is alone.
我一直在试图弄清楚如何使用igraph
或使用tidyverse
它,但我不确定如何去做,因为我总是以重复的配对或元素结束,比如我不需要的Univerisity3
。group3
奖金问题!
设置好边列表后,如何限制网络图中显示的边数?例如,我想消除出现少于 10 次的所有边缘。实际的数据集很大,有很多机构。
非常感谢!
解决方案
我真的很喜欢一个基本的 R 解决方案,所以这就是你从我这里得到的。它有点 hacky 和 ad hoc,但它似乎很快就能完成工作。
out <- do.call("rbind", lapply(split(data, data$GROUP), function(d) {
if (nrow(d) > 1) unique(do.call("rbind", combn(d$INSTITUTION, 2, simplify = FALSE)))
}))
这会按组拆分原始数据,然后在每个组内执行操作。该操作是,如果组中有不止一行,则取组成员的所有成对组合(删除重复项,尽管不应该有任何重复项)。最后,它将所有结果绑定到一个矩阵中。
要将数据集限制为出现超过 10 次的边,首先,创建一个“边 ID”,然后将边 ID 制成表格并删除所有出现 10 次或更少的边。
edgeID <- do.call(paste, as.data.frame(out))
tab <- table(edgeID)
out <- out[edgeID %in% names(tab)[tab > 10],,drop = FALSE]
推荐阅读
- react-native - RN横拉刷新
- wordpress - 如何在 wordpress 结帐页面上更改货币?
- c# - web.config - 忽略特定文件夹的重写
- node.js - 在 Nodejs 中创建一个全局电子邮件功能
- python - Python包无法导入
- ios - 如何存储基于用户ID的图像上传
- java - 如何让 jersey 和 @webservlet 一起工作
- css - 如何设置 Angular 材料数据表的各个行的样式?
- kubernetes - 让序数索引为 0 的 Kuberentes StatefulSet Pod 停止服务?
- php - 致命错误:允许的内存大小为 536870912 字节已用尽(尝试分配 1023 字节)