我是编程新手,我正在尝试在R中执行网络分析。我有一个包含2列的数据框架,一个是起源国,另一个是目的地。我正在尝试计算R中的介数和贴近度中心性,但当尝试使用以下方法绘制图形时:
g <- graph (c2, directed=TRUE),其中c2是如上所述的我的DF的名称,我得到如下消息:
Error in graph(c2, directed = TRUE) :
'edges' must be numeric or character. 我已经尝试过通过以下方法将因子转换为字符:
c2 <- data.frame(lapply(c2, as.character), stringsAsFactors=F)但出于某种原因,它并没有起到作用。我做错了什么?
edit* - dput(head(c2))给出:
> 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")发布于 2019-06-30 14:07:20
正如@r2evans和@PavoDive所指出的,在提出问题时提供一些数据是很重要的。尽管如此,还是有一些你可以尝试的东西。我对你的数据可能是什么样子做了一些假设:
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)发布于 2019-06-30 14:19:30
您不能将数据框传递给图形。它期望的向量如下所示
("china","india","USA","india","italy","china") 其中边是第一对元素,第二对元素,依此类推。所以在这个例子中,你有一个边缘中国-印度,一个边缘是美国-印度,一个边缘是意大利-中国。
发布于 2019-06-30 23:34:59
您正在寻找来自igraph的函数graph_from_data_frame:
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)https://stackoverflow.com/questions/56822538
复制相似问题