ここに私の問題があります:私は新しい一般的なマトリックスを構築するためにデータを抽出するいくつかのマトリックスから始めています。最初のステップは、csvモジュールを使用してinfileを読み取り、最終的なマトリックスの列ヘッダーとして使用される「位置」値(row [1]に格納されている)を抽出することです。各インファイルには、合計「位置」のサブセットが含まれています。これは、複数のインファイルに存在する場合があります。したがって、私はまず、繰り返される値を無視して、すべての「位置」値のマージから(小さい整数から大きい整数への)順序付きリストを作成しています。これが私が行っている方法です。
for infile in glob.glob('passed_*.vcf'):
infilen=open(infile)
inf = csv.reader(infilen,delimiter='\t')
for row in inf:
if row[1] in pos:
continue
else:
pos.append(row[1])
infilen.close()
pos.sort(key=int)
head=str('\t'.join(pos))
of=open('trial.txt', 'a')
print>>of,head
それが終わったら、元のinfileに戻り、上で作成した対応するヘッダー(つまり「position」)の下に追加したい別の値(今回はrow [3])を読み取ります。各インファイルには合計位置のサブセットが含まれているため、個々のインファイルの行[1]に最終的なマトリックス位置(リスト "pos"に格納されている)が存在しない場合は、ギャップを埋める必要があります。ここに私が試しているコードがあります:
for infile in glob.glob('passed_*.vcf'):
infilen=open(infile)
inf = csv.reader(infilen,delimiter='\t')
seq=[]
for row in inf:
if row[1] in pos:
seq.append(row[3])
else:
seq.append('N')
言うまでもなく、私は立ち往生しています。whileループを使うことを考えていましたが、あまり経験がないので、なんらかのアドバイスをお願いしています。
サンプルデータ
入力(サンプル1):
1 2025 blah A . blah PASS AC=0 GT:DP 0/0:61
2 2027 blah C . blah blah AC=0 GT:DP 0/0:61
3 2028 blah T . blah PASS AC=0 GT:DP 0/0:61
入力(サンプルn):
1 2025 blah G . blah PASS AC=0 GT:DP 0/0:61
2 2026 blah A . blah blah AC=0 GT:DP 0/0:61
3 3089 blah T . blah PASS AC=0 GT:DP 0/0:61
出力(入力row [1]を変数として、row [3]を値として持つ単一の行列。各行は異なるサンプル、つまり異なる入力ファイルです):
2025 2026 2027 2028 ... 3089
sample1 A NaN C T NaN
samplen G A NaN NaN T