从不同的表中提取特定数据并合并

从不同的表中提取特定数据并合并

我想根据列标题从不同表的特定列中提取特定行。但是,我的知识似乎太有限,无法自己解决这个问题(无论是在命令行还是 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

相关内容