如何解决如何重新排列我的会议参与者数据以可视化网络?
我有一个问题,关于如何尝试重新排列我的数据并尝试在 R 中构建交互的“网络”可视化。基本上我有一个会议列表及其组织如下:
会议ID | 参加者 |
---|---|
1 | 约翰 |
1 | 标记 |
1 | 凯文 |
2 | 凯文 |
2 | 山姆 |
我想创建一个可视化,显示任何人都与之交谈过的人际网络。因此,例如,如果我选择 Kevin,我希望中心节点是 Kevin,其中两个连接的节点分别代表 Sam、Mark 和 John,因为 Kevin 参加了与他们所有人的会议。根据交互次数调整节点的大小也很酷。
如果您能帮助将数据重新排列为以下形状,那也很有用,然后我可以尝试从那里解决问题。
个人 | 联系方式 | 交互数量 |
---|---|---|
凯文 | 约翰 | 1 |
凯文 | 标记 | 1 |
凯文 | 山姆 | 1 |
解决方法
有几个软件包可以帮助可视化网络(也称为图形)。有关详细信息,请参阅 CRAN 上的 gR 任务视图 (https://cran.r-project.org/web/views/gR.html)。
这是使用 diagram
包的一种方法(假设 John 和 Mark 也应该连接,因为他们可以在会议 1 中相互交谈)。
library(diagram)
mydat <- data.frame(ID=rep(1:2,c(3,2)),Attendee=c('John','Mark','Kevin','Sam'))
people <- unique(mydat$Attendee)
mydat$personID <- match(mydat$Attendee,people)
M <- matrix(0,nrow=length(people),ncol=length(people))
# break data frame into meetings
mydat2 <- split(mydat,mydat$ID)
# update M for each meeting
for(df in mydat2) {
combs <- combn(df$personID,2)
M[t(combs)] <- df$ID[1]
}
plotmat(M,name=people,curve=0,arr.type='none')
,
为了重塑您的数据,您可以使用 dplyr 中的 purrr 和 tidyverse。这是关于使用 ggraph 可视化网络的章节。
第一步,您可以像这样转换数据:
library(dplyr)
library(purrr)
data <- tibble(
Attendee = c('John','Sam','John'),ID = c(1,1,2,2))
data %>%
arrange(ID,Attendee) %>%
group_by(ID) %>%
filter(n() > 1) %>%
split(.$ID) %>%
map(.,1) %>%
map(~combn(.x,m = 2)) %>%
map(~t(.x)) %>%
map_dfr(as_tibble) %>%
group_by(V1,V2) %>%
summarise(
N = n()) %>%
ungroup()
结果:
# A tibble: 5 x 3
V1 V2 N
<chr> <chr> <int>
1 John Kevin 2
2 John Mark 1
3 John Sam 1
4 Kevin Mark 1
5 Kevin Sam 1
这改编自 W.R. Chase 在 this article 中的解释。
附:
发布与数据和 r
相关的问题时,它有助于发布示例数据,如here 所述。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。