首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“‘edges”必须是数字或字符。有什么问题吗?

“‘edges”必须是数字或字符。有什么问题吗?
EN

Stack Overflow用户
提问于 2019-06-30 13:05:28
回答 3查看 797关注 0票数 0

我是编程新手,我正在尝试在R中执行网络分析。我有一个包含2列的数据框架,一个是起源国,另一个是目的地。我正在尝试计算R中的介数和贴近度中心性,但当尝试使用以下方法绘制图形时:

代码语言:javascript
复制
g <- graph (c2, directed=TRUE)

,其中c2是如上所述的我的DF的名称,我得到如下消息:

代码语言:javascript
复制
Error in graph(c2, directed = TRUE) : 
  'edges' must be numeric or character. 

我已经尝试过通过以下方法将因子转换为字符:

代码语言:javascript
复制
c2 <- data.frame(lapply(c2, as.character), stringsAsFactors=F)

但出于某种原因,它并没有起到作用。我做错了什么?

edit* - dput(head(c2))给出:

代码语言:javascript
复制
> dput(head(c2))
structure(list(CountryID.Origin = c("india", "malaysia", "fiji", 
"fiji", "china", "united states (the)"), State = c("ACT", "ACT", 
"ACT", "ACT", "NSW", "NSW")), row.names = c(NA, 6L), class = "data.frame")
EN

回答 3

Stack Overflow用户

发布于 2019-06-30 14:07:20

正如@r2evans和@PavoDive所指出的,在提出问题时提供一些数据是很重要的。尽管如此,还是有一些你可以尝试的东西。我对你的数据可能是什么样子做了一些假设:

代码语言:javascript
复制
library(igraph)

df <- data.frame(Origin = c('India', 'China', 'UK', 'Russia', 'USA', 'Brazil', 'Germany', 'India', 'UK', 'China'),
                 Destination = c('China', 'UK', 'India', 'UK', 'India', 'UK', 'Russia', 'China', 'India', 'India'))

#Convert to a matrix
df.mat <- as.matrix(df)

#Convert to an igraph object
g <- graph.edgelist(df.mat, directed = TRUE)

# Make a very basic plot of the network
plot(g)

betweenness(g)
票数 1
EN

Stack Overflow用户

发布于 2019-06-30 14:19:30

您不能将数据框传递给图形。它期望的向量如下所示

代码语言:javascript
复制
("china","india","USA","india","italy","china") 

其中边是第一对元素,第二对元素,依此类推。所以在这个例子中,你有一个边缘中国-印度,一个边缘是美国-印度,一个边缘是意大利-中国。

票数 0
EN

Stack Overflow用户

发布于 2019-06-30 23:34:59

您正在寻找来自igraph的函数graph_from_data_frame

代码语言:javascript
复制
library(igraph)
library(countrycode)
library(tidyverse)

df_country = countrycode::codelist %>% as_tibble()

# data frame with edge list
df_network = tibble(
  origin = sample(df_country$country.name.en, size = 1000, replace = TRUE),
  destination = sample(df_country$country.name.en, size = 1000, replace = TRUE)
)

g_network = graph_from_data_frame(df_network, directed = TRUE)
betweenness(g_network)
plot(g_network)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56822538

复制
相关文章

相似问题

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