将邻接矩阵转换为 Cytoscape 的边缘列表(csv 文件)
Convert Adjacency Matrix into Edgelist (csv file) for Cytoscape
我在 csv 文件中有一个很大的 (200 columns/rows) 邻接矩阵。这详细说明了个人之间的互动。我想把这个文件转换成边缘列表,可以手动完成,但是会花费大量时间。
一小部分数据如下所示(第一个单元格是 space):
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 中尝试了以下代码,但它 returns 一个错误:
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'
获取数据:
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
假设对称,所以这对您来说可能是个问题。
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)
我在 csv 文件中有一个很大的 (200 columns/rows) 邻接矩阵。这详细说明了个人之间的互动。我想把这个文件转换成边缘列表,可以手动完成,但是会花费大量时间。
一小部分数据如下所示(第一个单元格是 space):
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 中尝试了以下代码,但它 returns 一个错误:
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'
获取数据:
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
假设对称,所以这对您来说可能是个问题。
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)