Tôi muốn trích xuất các hàng cụ thể từ các cột cụ thể từ các bảng khác nhau, dựa trên tiêu đề cột. Tuy nhiên, kiến thức của tôi dường như còn quá hạn chế để tự giải quyết (cả về dòng lệnh và python).
Tôi có một thư mục chứa ngày càng nhiều tệp .tsv (bảng OTU). Tất cả các tệp này đều có cùng bố cục:
- Hàng 1 chứa tiêu đề.
- Hàng 2 - x chứa dữ liệu. Số cột có thể khác nhau giữa các tệp.
- Cột 1 luôn chứa các id OTU.
- Cột cuối cùng luôn chứa Phân loại.
tập tin định dạng văn bản có thể được tìm thấy ở phía dưới
Ví dụ, tập tin 1 trông như thế này:
OTU_id |
20210801_sampleA |
20210801_sampleB |
20210801_sampleC |
phân loại |
otuA |
5 |
1 |
0 |
Hans thật tuyệt |
otuB |
2 |
0 |
0 |
Patricia có đôi mắt xanh |
otuF |
0 |
6 |
2 |
Rutger thực sự là Bart |
otuZ |
1 |
3 |
0 |
Félix đã bị lạc |
Tệp 2 trông như thế này:
OTU_id |
20211111_sampleT |
20211111_sampleG |
20211111_sampleA |
phân loại |
otuA |
0 |
3 |
3 |
Hans thật tuyệt |
otuB |
2 |
1 |
0 |
Patricia có đôi mắt xanh |
otuP |
1 |
6 |
0 |
Thomas thật tuyệt |
otuT |
2 |
22 |
56 |
Anna và Elsa |
otuZ |
1 |
8 |
4 |
Félix đã bị lạc |
Tất nhiên, số lượng mẫu và otus mỗi tệp là khác nhau.
Như bạn cũng có thể thấy, tiêu đề của các mẫu luôn được đặt trước ngày tháng. Trong một tệp nhất định, đây luôn là cùng một ngày.
Những gì tôi muốn đạt được bây giờ là như sau:
Nếu tôi có một tên mẫu nào đó, ví dụ sampleA, tôi muốn trích xuất kết quả cho mẫu này từ tất cả các bảng (tệp .tsv) trong thư mục. Tất nhiên, sampleA chỉ nên được trích xuất từ các tệp có trong đó.
Trong bảng đầu tiên, nó sẽ tìm thấy mẫuA trong cột thứ hai và nó sẽ lấy các kết quả mà giá trị ở các hàng bên dưới lớn hơn 0. Trong bảng thứ hai, nó sẽ tìm thấy mẫuA trong cột thứ 4.
Bảng cuối cùng sẽ trông như thế này:
OTU_id |
20210801_sampleA |
20211111_sampleA |
phân loại |
otuA |
5 |
3 |
Hans thật tuyệt |
otuB |
2 |
0 |
Patricia có đôi mắt xanh |
otuZ |
1 |
4 |
Félix đã bị lạc |
otuT |
0 |
56 |
Anna và Elsa |
SampleA có dữ liệu cho otuA,B,Z trong tệp đầu tiên. Các kết quả này được tiếp quản (vì vậy OTU_id, các giá trị cho tiêu đề 20210801_sampleA và Phân loại).
Như bạn sẽ thấy, otuF không được trích xuất từ bảng đầu tiên, vì mẫuA có giá trị 0 ở đó. otuF cũng không có trong bảng 2, do đó hoàn toàn không có trong tệp đầu ra.
otuA và otuZ cũng có giá trị > 0 trong bảng 2, vì vậy các giá trị này đã được thay thế.
otuB có giá trị 0 đối với mẫu A trong bảng 2. Thông thường nó sẽ không trích xuất nó, nhưng vì nó đã được trích xuất từ bảng 1 nên số 0 được thêm vào vị trí đó.
otuT chỉ có trong bảng 2 và do đó đã được trích xuất ở đó (OTU_id, giá trị cho 20211111_sampleA và Taxonomy). Vì không tìm thấy trong bảng 1 nên số 0 được thêm vào vị trí đó.
Trong tệp kết quả, cột đầu tiên cũng phải là OTU_id. các cột từ 2 đến x phải chứa dữ liệu cho mẫuA, được trích xuất từ các tệp trong thư mục. Cột cuối cùng phải chứa Phân loại.
Tôi hy vọng bạn quản lý để hiểu tất cả mọi thứ. Nó đã làm phiền tôi một thời gian và thiếu kỹ năng để tìm ra nó. Xin vui lòng cho tôi biết nếu một cái gì đó không rõ ràng!
Cảm ơn rất nhiều vì sự giúp đỡ của bạn và xin lỗi đã làm phiền bạn với điều này!
Chúc mừng
guillaume
Bảng định dạng văn bản 1.tsv:
OTU_id 20210801_sampleA 20210801_sampleB 20210801_sampleC Phân loại
otuA 5 1 0 Hans thật tuyệt
otuB 2 0 0 Patricia có đôi mắt xanh
otuF 0 6 2 Rutger thực ra là Bart
otuZ 1 3 0 Felix đã mất tích
bảng định dạng văn bản2.tsv
OTU_id 20211111_sampleT 20211111_sampleG 20211111_sampleA Phân loại
otuA 0 3 3 Hans thật ngầu
otuB 2 1 0 Patricia có đôi mắt xanh
otuP 1 6 0 Thomas rất tuyệt
otuT 2 22 56 Anna và Elsa
otuZ 1 8 4 Felix đã mất tích
đầu ra định dạng văn bản.tsv
OTU_id 20210801_sampleA 20211111_sampleA Phân loại
otuA 5 3 Hans thật ngầu
otuB 2 0 Patricia có đôi mắt xanh
otuZ 1 4 Felix đã bị mất
otuT 0 56 Anna và Elsa