Csv
獲取文件作為行和列數據矩陣
我有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
(如果您的數據是製表符分隔的,您可以跳過)。然而,可能有更適合該任務的專用生物資訊學工具。