Я хотел бы извлечь определенные строки из определенных столбцов из разных таблиц на основе заголовка столбца. Однако мои знания кажутся слишком ограниченными, чтобы решить эту проблему самостоятельно (как в командной строке, так и в python).
У меня есть каталог с растущим количеством файлов .tsv (таблиц OTU). Все эти файлы имеют одинаковую структуру:
- Строка 1 содержит заголовки.
- Строки 2 - x содержат данные. Количество столбцов может отличаться в разных файлах.
- Столбец 1 всегда содержит идентификаторы OTU.
- Последний столбец всегда содержит таксономию.
файлы в текстовом формате можно найти внизу
Например, файл 1 выглядит так:
OTU_id |
20210801_sampleA |
20210801_sampleB |
20210801_sampleC |
Таксономия |
отуА |
5 |
1 |
0 |
Ганс крутой |
отуБ |
2 |
0 |
0 |
У Патриции голубые глаза |
otuF |
0 |
6 |
2 |
Рутгер на самом деле Барт. |
отуз |
1 |
3 |
0 |
Феликс был потерян |
Файл 2 выглядит так:
OTU_id |
20211111_sampleT |
20211111_sampleG |
20211111_sampleA |
Таксономия |
отуА |
0 |
3 |
3 |
Ганс крутой |
отуБ |
2 |
1 |
0 |
У Патриции голубые глаза |
отуП |
1 |
6 |
0 |
Томас великолепен |
отуТ |
2 |
22 |
56 |
Анна и Эльза |
отуз |
1 |
8 |
4 |
Феликс был потерян |
Конечно, количество семплов и отусов у каждого файла разные.
Как вы также можете видеть, заголовкам примеров всегда предшествует дата. В определенном файле это всегда одна и та же дата.
Теперь я хочу добиться следующего:
Если у меня есть определенное имя образца, например, образец A, я хочу извлечь результаты для этого образца из всех таблиц (файлов .tsv) в каталоге. Конечно, sampleA следует извлекать только из файлов, в которых он присутствует.
В первой таблице он найдет образец A во втором столбце и должен принять результаты, для которых значение в следующих строках больше 0. Во второй таблице он найдет образец A в 4-м столбце.
Итоговая таблица должна выглядеть так:
OTU_id |
20210801_sampleA |
20211111_sampleA |
Таксономия |
отуА |
5 |
3 |
Ганс крутой |
отуБ |
2 |
0 |
У Патриции голубые глаза |
отуз |
1 |
4 |
Феликс был потерян |
отуТ |
0 |
56 |
Анна и Эльза |
SampleA содержит данные для otuA,B,Z в первом файле. Эти результаты перенимаются (таким образом, OTU_id, значения заголовка 20210801_sampleA и таксономия).
Как вы увидите, otuF не был извлечен из первой таблицы, потому что там у sampleA было значение 0. otuF также отсутствует в таблице 2, поэтому полное отсутствие в выходном файле.
otuA и otuZ также имели значения > 0 в таблице 2, поэтому эти значения были приняты.
otuB имел значение 0 для sampleA в таблице 2. Обычно он не извлекает его, но поскольку он был извлечен из таблицы 1, в этой позиции добавляется 0.
otuT присутствует только в таблице 2 и поэтому был извлечен оттуда (OTU_id, значение для 20211111_sampleA и таксономии). Поскольку он не был найден в таблице 1, в этой позиции добавляется 0.
Таким образом, в файле результатов первым столбцом также должен быть OTU_id. столбцы со 2 по x должны содержать данные для sampleA, извлеченные из файлов в каталоге. Последний столбец должен содержать таксономию.
Надеюсь, вам удалось все понять. Это беспокоило меня в течение некоторого времени, и мне не хватало навыков, чтобы понять это. Пожалуйста, дайте мне знать, если что-то не ясно!
Большое спасибо за вашу помощь и извините, что беспокою вас с этим!
Ваше здоровье
Гийом
Текстовая таблица 1.tsv:
OTU_id 20210801_sampleA 20210801_sampleB 20210801_sampleC Таксономия
otuA 5 1 0 Ганс крутой
otuB 2 0 0 У Патриции голубые глаза
otuF 0 6 2 Рутгер на самом деле Барт
otuZ 1 3 0 Феликс потерялся
текстовый формат table2.tsv
OTU_id 20211111_sampleT 20211111_sampleG 20211111_sampleA Таксономия
otuA 0 3 3 Ганс крутой
otuB 2 1 0 У Патрисии голубые глаза
otuP 1 6 0 Томас великолепен
otuT 2 22 56 Анна и Эльза
otuZ 1 8 4 Феликс потерялся
текстовый формат output.tsv
OTU_id 20210801_sampleA 20211111_sampleA Таксономия
otuA 5 3 Ганс крутой
otuB 2 0 У Патрисии голубые глаза
otuZ 1 4 Феликс потерялся
otuT 0 56 Анна и Эльза