Bonjour à tous, dans le cadre d'un projet je dois parcourirs deux tableaux de données ayant chacun des informations différentes et m'en servir. Je m'explique:
1 2
| blast<-read.table("matches.m8")
data<-read.table("seq.fnodes2") |
Voici un exemple de leur contenus respectifs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| [78793 rows x 2 columns]
>>> cluster
1 g1.t1_0035
0 1 g1.t1_0035_0042
1 119365 g1.t1_0042
2 90273 g1.t1_0042_0035
3 71567 g10.t1_0035
4 37976 g10.t1_0035_0042
5 22560 g10.t1_0042
6 90280 g10.t1_0042_0035
7 82698 g100.t1_0035
8 47392 g100.t1_0035_0042
9 28484 g100.t1_0042
10 22580 g100.t1_0042_0035
11 19474 g1000.t1_0035
12 5770 g1000.t1_0035_0042
13 29708 g1000.t1_0042
14 99776 g1000.t1_0042_0035
15 6283 g10000.t1_0035
16 39828 g10000.t1_0035_0042
17 25383 g10000.t1_0042
18 106614 g10000.t1_0042_0035
19 6285 g10001.t1_0035
20 13866 g10001.t1_0035_0042
21 121157 g10001.t1_0042
22 106615 g10001.t1_0042_0035
23 6286 g10002.t1_0035
24 113 g10002.t1_0035_0042
25 25397 g10002.t1_0042
26 106616 g10002.t1_0042_0035
27 4643 g10003.t1_0035
28 13868 g10003.t1_0035_0042
29 25398 g10003.t1_0042
... ... ... |
et
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| [78793 rows x 2 columns]
>>> blast
g1.t1_0035_0042 g1.t1_0035_0042.1 100.0 286 0 0.1 1 \
0 g1.t1_0035_0042 g1.t1_0035 100.0 257 0 0 30
1 g1.t1_0035_0042 g9307.t1_0035 26.9 134 65 2 60
2 g2.t1_0035_0042 g2.t1_0035_0042 100.0 445 0 0 1
3 g2.t1_0035_0042 g2.t1_0035 95.8 451 3 3 1
4 g2.t1_0035_0042 g24520.t1_0042_0035 61.1 429 137 7 1
5 g2.t1_0035_0042 g9924.t1_0042 61.1 429 137 7 1
6 g2.t1_0035_0042 g1838.t1_0035 86.2 29 4 0 414
7 g3.t1_0035_0042 g3.t1_0035_0042 100.0 719 0 0 1
8 g3.t1_0035_0042 g3.t1_0035 84.7 753 62 6 8
9 g4.t1_0035_0042 g4.t1_0035_0042 100.0 242 0 0 1
10 g4.t1_0035_0042 g3.t1_0035 98.8 161 2 0 1
11 g5.t1_0035_0042 g5.t1_0035_0042 100.0 291 0 0 1
12 g5.t1_0035_0042 g3.t1_0035 93.1 291 0 1 1
13 g6.t1_0035_0042 g6.t1_0035_0042 100.0 152 0 0 1
14 g6.t1_0035_0042 g4.t1_0035 100.0 152 0 0 1
15 g7.t1_0035_0042 g7.t1_0035_0042 100.0 216 0 0 1
16 g7.t1_0035_0042 g5.t1_0035 98.1 160 3 0 57
17 g7.t1_0035_0042 g11143.t1_0042 46.5 230 99 3 1
18 g7.t1_0035_0042 g27537.t1_0042_0035 40.8 233 111 3 1
19 g3778.t1_0035_0042 g3778.t1_0035_0042 100.0 86 0 0 1
20 g3778.t1_0035_0042 g6174.t1_0035 98.0 51 1 0 4
21 g3778.t1_0035_0042 g20037.t1_0035_0042 100.0 50 0 0 5
22 g3778.t1_0035_0042 g37190.t1_0035 100.0 50 0 0 5
23 g3778.t1_0035_0042 g15112.t1_0042_0035 66.0 53 18 0 4
24 g3778.t1_0035_0042 g6061.t1_0042 66.0 53 18 0 4
25 g18109.t1_0035_0042 g18109.t1_0035_0042 100.0 86 0 0 1
26 g18109.t1_0035_0042 g33071.t1_0035 100.0 81 0 0 1
27 g18109.t1_0035_0042 g32810.t1_0035 96.4 83 3 0 1
28 g18109.t1_0035_0042 g17982.t1_0035_0042 98.6 72 1 0 10
29 g18110.t1_0035_0042 g18110.t1_0035_0042 100.0 67 0 0 1
... ... ... ... ... ... ... ... |
Si vous restez focalisé sur le tableau cluster, la première colonne correspond à l'identifiant du cluster et à l'intérieur de chaque cluster il y a plusieurs ID de séquences. Après avoir divisé en liste tous mes cluster:
liste=split(x = data$V2, f = data$V1)
Il me faut créer un fonction qui renvois les paires de séquences les pus similaires en s'aidant du tableau blast qui contient un score de similarité entre chaque paire de séquence.
Voici un exemple:
disons pour l'exemple que nous avons 2 clusters (dataframe cluster):
1 2 3 4 5 6 7 8 9 10
| cluster 1:
seq1
seq2
seq3
seq4
cluster 2:
seq5
seq6
seq7
... |
Dans le tableau blast il y a à la colonne 3 un score de similarité entre toutes les séquences :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
seq1 vs seq1 100
seq1 vs seq2 90
seq1 vs seq3 56
seq1 vs seq4 49
seq1 vs seq5 40
....
seq2 vs seq3 70
seq2 vs seq4 98
...
seq5 vs seq5 100
seq5 vs seq6 89
seq5 vs seq7 60
seq7 vs seq7 46
seq7 vs seq7 100
seq6 vs seq6 100 |
Et ce que je voudrais c'est renvoyer un tableau comme ceci :
1 2 3 4 5 6
| cluster 1 (best paired sequences):
seq 1 vs seq 2
cluster2 (best paired sequences):
seq 5 vs seq6
... |
Comme vous pouvez le constater, je ne veux pas prendre en compte le score de similarité des séquences appareillées à elles-mêmes
Si quelqu’un aurait une idée de fonction qui pourrit faire une telle chose, je lui en remercierais grandement.
Partager