在R中使用igraph创建具有复杂数据的图形
我想从包含多个数据列的数据框中创建一个图形,其中所有列都包含顶点,如下所示: 如果在一行中同时发现两个顶点,则它们应在图形中连接。在我的示例中,顶点“案例3”应连接到以下顶点:“案例1”、“Jon”、“案例5”、“Bill”(应忽略NA)。在R中使用igraph创建具有复杂数据的图形,r,igraph,R,Igraph,我想从包含多个数据列的数据框中创建一个图形,其中所有列都包含顶点,如下所示: 如果在一行中同时发现两个顶点,则它们应在图形中连接。在我的示例中,顶点“案例3”应连接到以下顶点:“案例1”、“Jon”、“案例5”、“Bill”(应忽略NA)。 提前谢谢 您的问题是如何操作原始数据,因为您需要正确构建edgelist。唯一的方法是指示两列,链接的发送方(第1列)和链接的接收方(第2列)。允许自定向链接(例如,从“a”到“a”)。其他列是链接的特征,永远 您的示例edgelist显示了3列顶点:这不
提前谢谢 您的问题是如何操作原始数据,因为您需要正确构建edgelist。唯一的方法是指示两列,链接的发送方(第1列)和链接的接收方(第2列)。允许自定向链接(例如,从“a”到“a”)。其他列是链接的特征,永远 您的示例edgelist显示了3列顶点:这不是有效的edgelist,其中一列是无用的。所以
tidyverse
工具和%%>%%
操作符:
# ↓ SAMPLE DATA (colnames are different from the ones you provided) ↓
raw_data <- data.frame(case_no=c(1, 2,3, 4),
related_case =c(3,5,5, NA) ,
received_by = c("Jon", "Wendy","Jon", NA) ,
packed_by = c(NA, "Wendy", "Bill", NA) )
# ↓ First series of links ↓
edges_list <- raw_data %>%
select(FROM = case_no, related_case, TO = received_by) %>%
mutate(TYPE = 'Received') # ↑ THIS IS ONLY THE FIRST COLUMNS OF RECEIVERS
# ↓ APPEND THE SECOND LIST OF RECEIVER TO THE FIRST VERSION OF THE EDGESLIST↓
edges_list <- select(raw_data, FROM = case_no, related_case, TO = packed_by) %>%
mutate(TYPE = 'Packed') %>% #↑ HERE THE SECOND COLUMN OF RECEIVERS↑
rbind(edges_list)
edges_list <- na.omit(edges_list) # ← REMOVE NA FILLED ROWS
edges_list %>% igraph::graph_from_data_frame(directed = T) %>%
igraph::plot.igraph() # CREATE YOUR GRAPH
#↓ 示例数据(ColName与您提供的不同)↓
原始数据%
变异(类型='接收')#↑ 这只是接收器的第一列
# ↓ 将接收器的第二个列表附加到EDGESLIST的第一个版本↓
边缘列表%
变异(类型='压缩')%>%#↑ 这里是第二列接收器↑
rbind(边列表)
边列表%igraph::来自数据帧的图形(定向=T)%>%
igraph::plot.igraph()#创建图形
在rbind之后,我在match.names中得到一个错误-名称与以前的名称不匹配…是:如果粘贴并复制示例,它的工作就完美了。正如我在代码示例的第一行中所说的那样,='colname与您提供的不同'。colname必须完全相似,才能使用rbind
。通常,分析网络需要一些数据操作。。。也许您应该从R中编程的基础知识开始?因为您没有提供数据示例,所以我必须为代码示例制作一个。只要复制粘贴它,你就会看到它的工作。