Aș dori să extrag anumite rânduri din anumite coloane din tabele diferite, pe baza antetului coloanei. Cu toate acestea, cunoștințele mele par să fie prea limitate pentru a le rezolva singur (atât în linia de comandă, cât și în python).
Am un director cu un număr tot mai mare de fișiere .tsv (tabelele OTU). Toate aceste fișiere au același aspect:
- Rândul 1 conține anteturi.
- Rândurile 2 - x conțin date. Numărul de coloane poate diferi între fișiere.
- Coloana 1 conține întotdeauna ID-urile OTU.
- Ultima coloană conține întotdeauna Taxonomia.
fișierele formatate text pot fi găsite în partea de jos
De exemplu, fișierul 1 arată astfel:
OTU_id |
20210801_eșantionA |
20210801_probaB |
20210801_probaC |
Taxonomie |
otuA |
5 |
1 |
0 |
Hans este cool |
otuB |
2 |
0 |
0 |
Patricia are ochi albaștri |
otuF |
0 |
6 |
2 |
Rutger este de fapt Bart |
otuZ |
1 |
3 |
0 |
Felix era pierdut |
Fișierul 2 arată astfel:
OTU_id |
20211111_probaT |
20211111_eșantionG |
20211111_probaA |
Taxonomie |
otuA |
0 |
3 |
3 |
Hans este cool |
otuB |
2 |
1 |
0 |
Patricia are ochi albaștri |
otuP |
1 |
6 |
0 |
Thomas este grozav |
otuT |
2 |
22 |
56 |
Anna și Elsa |
otuZ |
1 |
8 |
4 |
Felix era pierdut |
Desigur, numărul de mostre și otu-uri sunt diferite pe fișier.
După cum puteți vedea, de asemenea, anteturile mostrelor sunt întotdeauna precedate de o dată. Într-un anumit fișier, aceasta este întotdeauna aceeași dată.
Ceea ce vreau să obțin acum este următorul lucru:
Dacă am un anumit nume de eșantion, de exemplu sampleA, vreau să extrag rezultatele pentru acest eșantion din toate tabelele (fișiere .tsv) din director. Desigur, sampleA ar trebui extras doar din fișierele în care este prezent.
În primul tabel va găsi eșantionul A în coloana a doua și ar trebui să preia rezultatele pentru care valoarea din rândurile de mai jos este mai mare decât 0. În al doilea tabel, va găsi eșantionul A în coloana a 4-a.
Masa finală ar trebui să arate astfel:
OTU_id |
20210801_eșantionA |
20211111_probaA |
Taxonomie |
otuA |
5 |
3 |
Hans este cool |
otuB |
2 |
0 |
Patricia are ochi albaștri |
otuZ |
1 |
4 |
Felix era pierdut |
otuT |
0 |
56 |
Anna și Elsa |
SampleA are date pentru otuA,B,Z în primul fișier. Aceste rezultate sunt preluate (deci OTU_id, valorile pentru antetul 20210801_sampleA și Taxonomie).
După cum veți vedea, otuF nu a fost extras din primul tabel, deoarece sampleA avea o valoare 0 acolo. otuF, de asemenea, nu este prezent în tabelul 2, deci deci absența totală în fișierul de ieșire.
otuA și otuZ au avut și valori > 0 în tabelul 2, așa că aceste valori au fost preluate.
otuB a avut o valoare de 0 pentru eșantionul A din tabelul 2. În mod normal, nu l-ar extrage, dar din moment ce fusese extras din tabelul 1, se adaugă un 0 în acea poziție.
otuT este prezent doar în tabelul 2 și, prin urmare, a fost extras acolo (OTU_id, valoare pentru 20211111_sampleA și Taxonomie). Deoarece nu a fost găsit în tabelul 1, se adaugă un 0 în acea poziție.
În fișierul cu rezultate, prima coloană ar trebui astfel să fie și OTU_id. coloanele de la 2 la x ar trebui să conțină datele pentru sampleA, extrase din fișierele din director. Ultima coloană ar trebui să conțină Taxonomia.
Sper că reușiți să înțelegeți totul. Mă deranjează de ceva timp și nu am abilitățile să-mi dau seama. Vă rog să-mi spuneți dacă ceva nu este clar!
Vă mulțumesc mult pentru ajutor și îmi pare rău că vă deranjez cu asta!
Noroc
Guillaume
Tabelul formatat text 1.tsv:
OTU_id 20210801_sampleA 20210801_sampleB 20210801_sampleC Taxonomie
otuA 5 1 0 Hans e cool
otuB 2 0 0 Patricia are ochii albaștri
otuF 0 6 2 Rutger este de fapt Bart
otuZ 1 3 0 Felix a fost pierdut
tabel formatat text2.tsv
OTU_id 20211111_sampleT 20211111_sampleG 20211111_sampleA Taxonomie
otuA 0 3 3 Hans e cool
otuB 2 1 0 Patricia are ochii albaştri
otuP 1 6 0 Thomas este grozav
otuT 2 22 56 Anna şi Elsa
otuZ 1 8 4 Felix a fost pierdut
ieșire în format text.tsv
OTU_id 20210801_sampleA 20211111_sampleA Taxonomie
otuA 5 3 Hans e cool
otuB 2 0 Patricia are ochii albaștri
otuZ 1 4 Felix a fost pierdut
otuT 0 56 Anna si Elsa