为(900+)个节点创建边缘列表(在R中)

我在创建406351个边的边列表(在902个唯一节点中可能是两个节点的组合)时遇到问题。节点对应于医生,边缘对应于在一段时间(一年)中两个节点共享的患者数量。

我有医疗要求数据,其中一项观察结果是一名患者一次拜访特定医生。

到目前为止,对我有用的是:首先,将医生和病人的身份证对照起来,以获取每个病人对每个医生的拜访次数。之后,我获取了唯一的医生ID列表,并创建了包含所有可能的2种元素组合的边缘列表。最后,我用for循环“填充”边缘列表,该循环查看表中各列(医生)的每种组合,并计算出有多少特定患者的这两列(医生)的就诊次数均大于0。

这可行,但是我的问题是循环太慢,我想知道是否有更快的方法。

这是到目前为止我的方法的一个示例:

    #DATA
    case_number<-c("123","3456","5433","5678","9874","8566")
    doctor_id<-c("333","444","555","333","666","555")
    patient_id<-c("1","2","1","1")
    DATA<-data.frame(case_number,doctor_id,patient_id)

    #Table doc vs patients
    table<- as.data.table(as.data.frame.matrix(table(DATA$patient_id,DATA$doctor_id)))

    #Create edge list
    Drs<-unique(DATA$doctor_id)
    edge_list<-as.data.table(t(combn(as.vector(unique(Drs)),2)))

    #'fill up' edge list
    for (z in colnames(table)) {
    for (y in colnames(table)) {
        edge_list<-edge_list[(V1==z & V2==y) | (V2==z & V1==y),Weight:=nrow(table[table[[z]]>0 & table[[y]]>0])]}}
whitegjhh 回答:为(900+)个节点创建边缘列表(在R中)

没关系。我意识到,有了一些矩阵代数,我可以创建一个邻接矩阵,然后使用网络程序包创建边缘列表。注释是否需要代码!

本文链接:https://www.f2er.com/2985391.html

大家都在问