【问题标题】:Converting an edge list to an incidence matrix using in bipartite matrices使用二分矩阵将边列表转换为关联矩阵
【发布时间】:2017-07-01 13:48:58
【问题描述】:

我有一个这样的边缘列表

a   1
b   2
c   3
a   2
b   1

我想构建它的关联矩阵,如下所示:

    a   b   c   d
1   1   1   0   0
2   1   1   0   0
3   0   0   1   0
4   0   0   0   0

有什么想法吗?

【问题讨论】:

    标签: r matrix graph bipartite edge-list


    【解决方案1】:

    使用factor 再增加一个等级

        df=read.table(text='A B
                   a   1
                   b   2
                   c   3
                   a   2
                   b   1',header=T)
    
        levels(df$A)=c(levels(df$A),'d')
        df$B=as.factor(df$B)
        levels(df$B)=c(levels(df$B),'4')
        subset=table(df$B,df$A)
    
    > subset
    
        a   b   c   d
    1   1   1   0   0
    2   1   1   0   0
    3   0   0   1   0
    4   0   0   0   0
    

    【讨论】:

    • 抱歉,感谢您抽出宝贵时间,但这是一个庞大网络的示例,不适用于大型数据集。
    • 那你能详细解释一下你的问题吗?
    • @minoo Here 是一个如何构建稀疏矩阵的示例
    • @Wen 在我的问题中,行和列的名称类型并不重要,仅对于数据框的每一行,如果 mat[1,] 和 mat[,2] 例如在行所以在矩阵中我们把 1 否则 0 并为矩阵的所有输入展开它
    【解决方案2】:
    df<-cbind(df,1)
    
    require(qdapTools)
    incidence<-df[rep(seq_len(nrow(df)), df[,'1']), c('A', 'B')] %>%
    {split(.[,'B'], .[,'A'])} %>%
      mtabulate()
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2019-02-16
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多