首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将我的数据转换成我可以在R中进行网络可视化的东西?

如何将我的数据转换成我可以在R中进行网络可视化的东西?
EN

Stack Overflow用户
提问于 2022-05-05 08:39:01
回答 2查看 70关注 0票数 1

我在R中有一个dataframe,其中每一行都是一首歌,每一列都是在这首歌上协作的艺术家。我想想象哪些艺术家一起工作。我想我可以做一些网络分析,但是我不知道如何把我的数据转换成一个网络,或者一些有节点和边的东西,或者一个顶点。

代码语言:javascript
复制
song <- c('You','Strings','Club','Never','Yolo','Do it','Again','The world', 'Forever')
artist1 <- c('Art', 'Bee', 'Con', 'Con', 'Dev', 'Art', 'Evi', 'Evi', 'Guy')
artist2 <- c('Bee', 'Evi', NA, 'Bee', 'Fay', 'Con', 'Bee', 'Dev', NA)
artist3 <- c('Con', 'Fay', NA, NA, NA, 'Bee', 'Art', 'Con', NA)
df <- data.frame(song, artist1, artist2, artist3)

我想我需要计算(然后想象)每一个艺术家在同一排中发生的频率。然后,网络将艺术家显示为节点,协作(加权)显示为边缘。

关于该怎么走有什么线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-05 09:24:47

使用crossprod创建一个邻接矩阵,然后使用graph_from_adjacency_matrix创建一个图形对象,然后绘制它:

代码语言:javascript
复制
ta <- crossprod(table(cbind(df[1], stack(df[-1]))[-3]))

graph_from_adjacency_matrix(ta, diag = F, weighted = T, mode = "undirected") %>% 
  plot(edge.width = E(.)$weight)

票数 1
EN

Stack Overflow用户

发布于 2022-05-05 08:51:04

您可以尝试下面的代码

代码语言:javascript
复制
df %>%
    pivot_longer(!song, values_drop_na = TRUE) %>%
    select(!name) %>%
    rev() %>%
    graph_from_data_frame() %>%
    set_vertex_attr(name = "type", value = names(V(.)) %in% df$song) %>%
    plot(layout = layout_as_bipartite)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72124282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档