Csv

獲取文件作為行和列數據矩陣

  • January 14, 2019

我有gene.csv 文件,大小約為1.3 GB,有300 列和超過一百萬行。看起來像以下

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(列)的矩陣)中得到它。

與米勒一起,使用重塑

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來修改結構。

您要求的是交叉表(或數據透視表)。您可以使用GNU Datamash來實現它

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(如果您的數據是製表符分隔的,您可以跳過)。

然而,可能有更適合該任務的專用生物資訊學工具。

引用自:https://unix.stackexchange.com/questions/494259