我想根据列标题从不同表的特定列中提取特定行。但是,我的知识似乎太有限,无法自己解决这个问题(无论是在命令行还是 Python 中)。
我有一个目录,其中的 .tsv 文件(OTU 表)数量不断增加。这些文件都具有相同的布局:
- 第 1 行包含标题。
- 第 2 - x 行包含数据。不同文件的列数可能不同。
- 第 1 列始终包含 OTU id。
- 最后一列始终包含分类法。
文本格式的文件可以在底部找到
例如,文件 1 如下所示:
OTU 编号 | 20210801_样本A | 20210801_样本B | 20210801_样本C | 分类 |
---|---|---|---|---|
奥图亚 | 5 | 1 | 0 | 汉斯很酷 |
基因 | 2 | 0 | 0 | 帕特里夏有一双蓝眼睛 |
奥图夫 | 0 | 6 | 2 | 鲁特格实际上是巴特 |
奥图 | 1 | 3 | 0 | 菲利克斯迷路了 |
文件 2 如下所示:
OTU 编号 | 20211111_sampleT | 20211111_sampleG | 20211111_sampleA | 分类 |
---|---|---|---|---|
奥图亚 | 0 | 3 | 3 | 汉斯很酷 |
基因 | 2 | 1 | 0 | 帕特里夏有一双蓝眼睛 |
端到端 | 1 | 6 | 0 | 托马斯很棒 |
腸道 | 2 | 22 | 56 | 安娜和艾莎 |
奥图 | 1 | 8 | 4 | 菲利克斯迷路了 |
当然,每个文件的样本数量和 otus 是不同的。正如您所看到的,样本的标题前面总是有一个日期。在某个文件中,这个日期总是相同的。
我现在想要实现的目标如下:
如果我有一个特定的样本名称,例如 sampleA,我想从目录中的所有表(.tsv 文件)中提取此样本的结果。当然,sampleA 应该只从它所在的文件中提取。
在第一个表中,它将在第二列中找到 sampleA,并且它应该接管下面行中值大于 0 的结果。在第二个表中,它将在第 4 列中找到 sampleA。
最终的表格看起来应该是这样的:
OTU 编号 | 20210801_样本A | 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 在表 2 中也有值 > 0,因此这些值被接管。
otuB 在表 2 中对于 sampleA 的值为 0。通常不会提取它,但由于它已从表 1 中提取出来,因此在该位置添加了一个 0。
otuT 仅出现在表 2 中,因此从那里提取(OTU_id、20211111_sampleA 的值和分类法)。因为在表 1 中找不到它,所以在该位置添加了 0。
因此,在结果文件中,第一列也应为 OTU_id。第 2 列至第 x 列应包含从目录中的文件中提取的样本 A 的数据。最后一列应包含分类法。
我希望你能理解一切。这个问题困扰了我一段时间,但我缺乏解决问题的技能。如果有不清楚的地方,请告诉我!
非常感谢您的帮助,很抱歉打扰您!
欢呼 Guillaume
文本格式的表格1.tsv:
OTU_id 20210801_sampleA 20210801_sampleB 20210801_sampleC Taxonomy
otuA 5 1 0 Hans is cool
otuB 2 0 0 Patricia has blue eyes
otuF 0 6 2 Rutger is actually Bart
otuZ 1 3 0 Felix was lost
文本格式的 table2.tsv
OTU_id 20211111_sampleT 20211111_sampleG 20211111_sampleA Taxonomy
otuA 0 3 3 Hans is cool
otuB 2 1 0 Patricia has blue eyes
otuP 1 6 0 Thomas is great
otuT 2 22 56 Anna and Elsa
otuZ 1 8 4 Felix was lost
文本格式的输出.tsv
OTU_id 20210801_sampleA 20211111_sampleA Taxonomy
otuA 5 3 Hans is cool
otuB 2 0 Patricia has blue eyes
otuZ 1 4 Felix was lost
otuT 0 56 Anna and Elsa