【问题标题】:Convert Adjacency Matrix into Edgelist (csv file) for Cytoscape将邻接矩阵转换为 Cytoscape 的 Edgelist(csv 文件)
【发布时间】:2015-06-17 09:34:03
【问题描述】:

我在 csv 文件中有一个大的(200 列/行)邻接矩阵。这详细说明了个人之间的互动。我想将此文件转换为边缘列表,可以手动完成,但会花费大量时间。

数据的一小部分如下所示(第一个单元格是空格):

        A   B   C   
    A   0   0   1   
    B   0   0   1   
    C   1   0   0   

我想把它变成这样:

    A  1  C
    B  1  C
    C  1  A

这只是示例数据。基本上我想要的是绘制这些节点如何交互,并从中绘制这些交互的网络。我在 R 包 PCIT 中尝试了以下代码,但它返回错误:

    install.packages("PCIT")
    library(PCIT)
    input=read.csv('mouse.csv',header=TRUE,row.names=1,check.names=FALSE)
    setwd('/Users/Plosslab/Documents/PythonStuff')
    getEdgeList(input, rm.zero=TRUE)

但我收到以下错误:

    Error in structure(.Internal(as.vector(x, "double")), Csingle = TRUE) : 
    (list) object cannot be coerced to type 'double'

【问题讨论】:

    标签: python r csv cytoscape


    【解决方案1】:

    获取数据:

    m <- as.matrix(read.table(text="
         A   B   C   D
        A   0   0   0   1
        B   0   0   1   0
        C   1   0   0   1",
       header=TRUE))
    

    怎么样

    w <- which(m==1,arr.ind=TRUE)
    data.frame(r=rownames(m)[w[,"row"]],
               i=1,
               c=colnames(m)[w[,"col"]])
    ##   r i c
    ## 1 C 1 A
    ## 2 B 1 C
    ## 3 A 1 D
    ## 4 C 1 D
    

    (你关心订单吗...?)

    PCIT 无论如何都假定对称,所以这对你来说可能是个问题。

    【讨论】:

    • 您可以通过 w &lt;- w[order(w[, 1]), ] 之类的方式重新排序,然后我猜剩下的就做。
    • 有没有办法做到这一点而不像那样粘贴表格?我的矩阵是 200 行乘 200 列,相当大。
    • 我只粘贴了矩阵,以便有一些数据可以使用。如果您从矩阵 m 开始(数据框可能有效,也可能无效,我不知道)您应该没问题。
    • 非常感谢。我只是使用 read.csv 并将整个数据框写入一个表,似乎工作。谢谢!
    【解决方案2】:
    with open('input.csv') as infile:
        infile.readline()
        for row in csv.reader(infile, delimiter='\t'):
            src = row[0]
            weights = [int(i) for i in row[1:]]
            for dest, weight in zip("ABC", weights):
                if not weight: continue
                print(src, weight, dest)
    

    【讨论】:

    • 我是一个相对的 Python 新手,但是:为什么 if not weight: continue; print ... 而不是 if weight: print ... ??
    • @BenBolker:它们都是一样的。这只是我个人的喜好,仅此而已
    猜你喜欢
    • 2015-10-28
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多