Salut à tous,
Je suis face à un problème de manipulation de données: je dois importer un fichier .txt (from_soft.txt, qui est l'output d'un freeware "CFINDER" qui recherche les 'cliques' dans un network). Lorsqu'on ouvre le fichier 'from_soft.txt' dans notepad, il est comme ceci:
[..]output/from_soft:
1 2 3 4 5 6 7 8 9 10
| # text-text-text-text-text-text-text-text-text-text-
# text-text-text-text-text-text-text-text-text-text-
# text-text-text-text-text-text-text-text-text-text-
# text-text-text-text-text-text-text-text-text-text-
1: SpeciesA SpeciesB SpeciesC SpeciesD SpeciesE
2: SpeciesA SpeciesC SpeciesE SpeciesD SpeciesF SpeciesG SpeciesH
3: SpeciesB SpeciesC SpeciesF
4: SpeciesB SpeciesC SpeciesD SpeciesF SpeciesH
[...] |
J'arrive à l'importer dans R grâce à readLines:
from_soft<-readLines("from_soft.txt",n=-1,ok=T,warn=T,encoding="unknow",skipNul=F)
Et j'efface les premières lignes comme ceci:
from_soft<-as.data.frame(from_soft)[-(1:5),]
J'obtiens une table 'from_soft' comme ça :
1 2 3
| head(from_soft)
[1] 0: SpeciesA SpeciesB SpeciesC SpeciesD SpeciesE 1: SpeciesA SpeciesB SpeciesC SpeciesD SpeciesE 2: SpeciesA SpeciesB SpeciesC SpeciesD SpeciesE
[4] 3: SpeciesB SpeciesC SpeciesD SpeciesF SpeciesH [...] |
D'un autre côté j'ai une table référentielle ('ref') qui indique la valeur de chaque paire d'espèces. Elle est structurée comme suit :
1 2 3 4 5 6 7 8 9 10 11 12
| print(ref)
3324 SpeciesA SpeciesB 1
3325 SpeciesA SpeciesC 2
3326 SpeciesA SpeciesD 12
3327 SpeciesA SpeciesE 1
3328 SpeciesA SpeciesF 71
3329 SpeciesA SpeciesG 6
3330 SpeciesA SpeciesH 15
3331 SpeciesB SpeciesC 2
3332 SpeciesB SpeciesF 4
3333 SpeciesB SpeciesD 17
[...] |
D'un point de vue concret, chaque ligne de 'from_soft' correspond à une 'clique' dans le graph du network. Cela signifie que chaque espèce d'une ligne est interconnectée (et donc forme des paires) à (avec) toutes les autres.
Je voudrais donc calculer pour chaque ligne de 'from_soft' la moyenne de chaque paire.
En exemple, pour la ligne 1: de 'from_soft', voici toutes les paires existantes (qui sont de fait aussi existantes dans la table 'ref') :
1: SpeciesASpeciesB|SpeciesASpeciesC|SpeciesASpeciesD|SpeciesASpeciesE|SpeciesBSpeciesC|SpeciesBSpeciesD|SpeciesBSpeciesE|SpeciesCSpeciesD|SpeciesCSpeciesE|SpeciesDSpeciesE|
Chaque paire à une valeur dans 'ref' et j'aimerais avoir comme résultat une table qui ressemble à ça :
1 2 3 4 5
| 1: 3.5 (= moyenne de toutes les paires dans la 'clique' '1:')
2: 4.2
3: 1.5
4: 6
[...] |
Auriez-vous quelques suggestions?
Merci pour le coup de main!
R.
Partager