我有gene.csv 文件,大小约为1.3 GB,有300 列和超过100 万行。看起来像下面
id1 id2 id3 id4 count1 count2
S1001 450 GAF ARHGAP18 1.56E-05 1483
S1001 450 GAF ARHGAP12 5E-05 3698
S1001 450 GAF ARHGAP15 2.75E-06 93
S1001 450 GAF ARHGAP17 3E-05 1889
S1001 450 GAF ARHGAP19 4.291E-06 596
S1002 450 GAF ARHGAP18 5.955E-05 5353
S1002 450 GAF ARHGAP12 8.578E-08 14
S1002 450 BAF ARHGAP15 2.91E-05 5381
S1002 450 BAF ARHGAP17 1.78E-06 105
S1002 450 BAF ARHGAP19 3.62E-05 5764
S1003 450 BAF ARHGAP18 5.2697E-06 330
S1003 450 BAF ARHGAP12 5.955E-05 2263
S1003 450 BAF ARHGAP15 8.578E-08 3147
S1003 450 CAF ARHGAP17 2.91E-05 50
S1003 450 CAF ARHGAP19 5.955E-05 1595
S1004 450 CAF ARHGAP18 8.578E-08 970
S1004 450 CAF ARHGAP12 2.91E-05 816
S1004 450 CAF ARHGAP15 5.955E-05 4981
S1004 450 CAF ARHGAP17 8.578E-08 816
S1004 450 CAF ARHGAP19 2.91E-05 4981
我只想以以下格式获取 id1、id4 和 count2 数据(作为矩阵)
id4 S1001 S1002 S1003 S1004
ARHGAP18 1483 5353 330 970
ARHGAP12 3698 14 2263 816
ARHGAP15 93 5381 3147 4981
ARHGAP17 1889 105 50 816
ARHGAP19 596 5764 1595 4981
请注意,我只需要重复一次,并作为新文件中的列名(因为 id1 在每个基因的每一行中重复)。我如何从简单的 bash 命令(基因名称(行)和样本 ID(列)的矩阵)中获取此信息。
答案1
与米勒一起,使用重塑
mlr --tsv cut -o -f id4,id1,count2 then reshape -s id1,count2 input.tsv
你将会拥有
id4 S1001 S1002 S1003 S1004
ARHGAP18 1483 5353 330 970
ARHGAP12 3698 14 2263 816
ARHGAP15 93 5381 3147 4981
ARHGAP17 1889 105 50 816
ARHGAP19 596 5764 1595 4981
我设置了一个 TSV 文件作为输入和输出。您的文本文件选项卡是否分开?
一些评论:
--tsv
是设置输入输出格式;cut
仅提取 id4、id1 和 count2;reshape
来修改结构。
答案2
你要求的是一个交叉制表(或数据透视表)。你可以使用它来实现GNU 数据混合
datamash --header-in --whitespace crosstab id4,id1 unique count2 < file
S1001 S1002 S1003 S1004
ARHGAP12 3698 14 2263 816
ARHGAP15 93 5381 3147 4981
ARHGAP17 1889 105 50 816
ARHGAP18 1483 5353 330 970
ARHGAP19 596 5764 1595 4981
--whitespace
(如果您的数据是制表符分隔的,则可以跳过)。
然而,可能有更适合该任务的专用生物信息学工具。