首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:为网络分析准备数据

R:为网络分析准备数据
EN

Stack Overflow用户
提问于 2020-08-25 13:20:48
回答 2查看 171关注 0票数 2

我有两列的数据:事务ID和Salesperson名称,其中一行代表事务,而salesperson代表事务。大多数事务都有一个以上的销售人员,因此在这种情况下,事务ID重复列出所有销售人员。

我想要创建一个网络,即使用r中的网络包,但是在如何格式化数据的问题上陷入困境。我可以通过对名称进行唯一排序来获取节点,但不确定如何转换数据以获得边缘列表。网络是无指向的。

我的数据如下:

代码语言:javascript
复制
Trans_ID | Name
--------------------
1        | Andy
1        | Ben
1        | Cindy
2        | David
2        | Eric
3        | Fabian
3        | George
4        | Hector

实际数据大约有300 K行数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-27 13:41:09

您可以加入Trans_ID来创建边缘:

代码语言:javascript
复制
library(dplyr)
library(visNetwork)

data <- tibble::tribble(~Trans_ID , ~Name,
1       , "Andy",
1        , "Ben",
1        , "Cindy",
2        , "David",
2        , "Eric",
3        , "Fabian",
3        , "George",
4        , "Hector")


nodes <- data %>% select(Name)  %>% unique() %>% mutate(id = Name, label = Name)
edges <- data %>% inner_join(data, by = c("Trans_ID"="Trans_ID")) %>% 
         filter(Name.x < Name.y) %>%
         mutate(from = Name.x, to = Name.y)


vn <- visNetwork(nodes, edges, height = 1200,width = "100%")  %>% visPhysics(stabilization = FALSE,solver='forceAtlas2Based')
vn 

票数 0
EN

Stack Overflow用户

发布于 2020-08-27 19:55:51

我不确定您将根据给定的数据框架来演示什么样的网络。下面是一个使用igraph的选项

Trans_ID关联的

  • Name

代码语言:javascript
复制
library(igraph)
g <- graph_from_data_frame(df,directed = FALSE)
V(g)$color <- c("light blue","yellow")[V(g)$name %in% df$Trans_ID + 1]
plot(g,vertex.size = 30)

给予

Trans_ID)

  • Name (按
  • 分组)

代码语言:javascript
复制
library(igraph)
DF <- as.data.frame(do.call(rbind,
        with(df,tapply(Name, Trans_ID, function(x) if (length(x)==1) t(rep(x,2)) else t(combn(x,2)) ))))
g <- graph_from_data_frame(DF,directed = FALSE)
plot(simplify(g),vertex.size = 30)

给予

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

https://stackoverflow.com/questions/63579790

复制
相关文章

相似问题

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