Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用igraph创建具有复杂数据的图形_R_Igraph - Fatal编程技术网

在R中使用igraph创建具有复杂数据的图形

在R中使用igraph创建具有复杂数据的图形,r,igraph,R,Igraph,我想从包含多个数据列的数据框中创建一个图形,其中所有列都包含顶点,如下所示: 如果在一行中同时发现两个顶点,则它们应在图形中连接。在我的示例中,顶点“案例3”应连接到以下顶点:“案例1”、“Jon”、“案例5”、“Bill”(应忽略NA)。 提前谢谢 您的问题是如何操作原始数据,因为您需要正确构建edgelist。唯一的方法是指示两列,链接的发送方(第1列)和链接的接收方(第2列)。允许自定向链接(例如,从“a”到“a”)。其他列是链接的特征,永远 您的示例edgelist显示了3列顶点:这不

我想从包含多个数据列的数据框中创建一个图形,其中所有列都包含顶点,如下所示:

如果在一行中同时发现两个顶点,则它们应在图形中连接。在我的示例中,顶点“案例3”应连接到以下顶点:“案例1”、“Jon”、“案例5”、“Bill”(应忽略NA)。
提前谢谢

您的问题是如何操作原始数据,因为您需要正确构建edgelist。唯一的方法是指示两列,链接的发送方(第1列)和链接的接收方(第2列)。允许自定向链接(例如,从“a”到“a”)。其他列是链接的特征,永远

您的示例edgelist显示了3列顶点:这不是有效的edgelist,其中一列是无用的。所以

  • 您必须通过操作数据来构造一个有效的edgelist(见下文)

  • 然后,你应该告诉igraph你的edgelist是什么,然后构建一个图,比如in和/或(对不起,不知羞耻的自动升级)

  • 为了根据您提供的示例构造有效的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中编程的基础知识开始?因为您没有提供数据示例,所以我必须为代码示例制作一个。只要复制粘贴它,你就会看到它的工作。