获取文件作为行和列数据矩阵

获取文件作为行和列数据矩阵

我有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(如果您的数据是制表符分隔的,则可以跳过)。

然而,可能有更适合该任务的专用生物信息学工具。

相关内容