我是编码的新手,我正在尝试在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")
答案 0 :(得分:1)
正如@ 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)
答案 1 :(得分:0)
您不能将数据框传递给图形。它期望像这样的向量
("china","india","USA","india","italy","china")
边缘 是第一对元素,第二对元素,依此类推。因此,在此示例中,您有一个边缘中国(印度),一个边缘美国(印度)和一个边缘意大利(中国)。
答案 2 :(得分:0)
您正在从graph_from_data_frame
中寻找函数igraph
:
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)