gpt4 book ai didi

r - 从组成员数据创建加权图

转载 作者:行者123 更新时间:2023-12-02 07:30:12 24 4
gpt4 key购买 nike

假设我在 R 中有一个数据集,指示组中的个体。这是一个例子:

grp <- c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5)
ind <- c("A", "C", "D", "B", "C", "D", "E", "A", "D", "E", "B", "F", "E", "A", "F")
data.frame(grp, ind)

所以,数据看起来像这样:

   grp ind
1 1 A
2 1 C
3 1 D
4 2 B
5 2 C
6 2 D
7 2 E
8 3 A
9 3 D
10 3 E
11 4 B
12 4 F
13 4 E
14 5 A
15 5 F

因此,第 1 组由个体(A、C、D)组成,第 2 组由个体(B、C、D、E)组成,依此类推。我想创建一个网络图来显示个人之间的联系方式。在一个群体中,所有个体都由边连接。边缘的粗细应反射(reflect)两个人相互联系的频率。

与:

pairs <- do.call(rbind, sapply(split(ind, grp), function(x) t(combn(x,2))))

我可以获得一个包含所有成对边的矩阵,我可以使用 igraph 包对其进行绘制:

library(igraph)
plot(graph.edgelist(pairs, directed=FALSE), edge.curved=FALSE)

network

但是有没有一种方法可以使边缘的厚度与特定配对发生的频率成正比?

最佳答案

@hrbrmstr 的解决方案构建了第二个图来获取边权重。您也可以通过对 pairs 进行操作来预先执行此操作:

# Count unique edge pairs
library(plyr)
weighted <- ddply(data.frame(pairs), .(X1, X2), count)

# Plot
library(igraph)
g <- graph.edgelist(as.matrix(weighted[,1:2]), directed=FALSE)
plot(g, edge.curved=FALSE, edge.width=weighted$freq*3)

enter image description here

关于r - 从组成员数据创建加权图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com