1

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

我有医疗索赔数据,其中一项观察是一名患者对特定医生的一次访问。

到目前为止,对我有用的是:首先,将医生与患者的 ID 对照,获取每位患者与每位医生的就诊次数。之后,我获取了唯一医生 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","2","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])]}}
4

1 回答 1

0

没关系。我意识到通过一些矩阵代数我可以创建一个邻接矩阵,然后使用网络包来创建边缘列表。需要代码的请留言!

于 2020-03-04T15:33:57.353 回答