首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python创建矩阵

使用python创建矩阵
EN

Stack Overflow用户
提问于 2016-11-19 14:54:34
回答 1查看 120关注 0票数 0

我有6个文本文件(每个文件对应一个特定的样本),每个文件看起来像这样:

代码语言:javascript
复制
Gene_ID Gene_Name   Strand  Start   End Length  Coverage    FPKM    TPM
ENSMUSG00000102735  Gm7369  +   4610471 4611406 936 0   0   0
ENSMUSG00000025900  Rp1 -   4290846 4409241 10926   0   0   0
ENSMUSG00000104123  Gm37483 -   4363346 4364829 1484    0   0   0
ENSMUSG00000102175  Gm6119  -   4692219 4693424 1206    0.328358    0.015815    0.008621

我希望收集一个文件中1&2列中的所有元素,并为新文件中的每个样本收集相应的TPM值(第9列),因此只要没有TPM值,就输入0。

我的输出文件应该如下所示:

代码语言:javascript
复制
gene_id gene_name sample1_tpm sample2_tpm sample3_tpm ......sample6_tpm
EN

回答 1

Stack Overflow用户

发布于 2016-11-19 15:47:06

要做到这一点,一种方法是保留一个字典,用于存储每个gene_id的样本值。

初始化字典= {}

遍历6个文件中的每个文件并执行以下操作:

代码语言:javascript
复制
for file in [f1,f2,f3..f6]:
   for line in file:
        labels = line.split(" ")
        val = 1 if labels[8] else 0 
     if labels[0] not in dictionary:
        dictionary[labels[0]] = {'name' : labels[1], 'sample' : [val]}            
     else:
        dictionary[labels[0]]['sample'].append(val) 

这会将关键字存储为gene_id,并将name,sample(6个sample_ids的列表)存储为值。

您现在可以通过迭代键和值来写入输出文件。

代码语言:javascript
复制
f = open("output.txt","w+")
f.write("gene_id,gene_name,sample1,sample2,sample3,sample4,sample5,sample6\n")
for key in dictionary.keys():
    samples = ",".join(dictionary[key]['sample'])
    f.write(dictionary[key]+","+dictionary[key]['name']+","+samples+"\n")
f.close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40690081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档