2014-04-17 112 views
2

我想刪除特定字符串「Gtype」中的列。從一個.txt製表符分隔文件。我已經在R:df <- df[, -grep("GType.", colnames(df))]中試過這個命令來完成這個任務。但是,我的矩陣太大(超過13 GB),R無法處理它。 (錯誤:無法分配大小的矢量....)刪除特定字符串的文本文件中的列

我的輸入文件:

Log.NE122 Gtype.NE122 Log.NE144 Gtype.NE144 
-0.33   AA   1.0   AB 

我的預期輸出:

Log.NE122 Log.NE144 
    -0.33  1.0  

我想知道它的工作原理在bash。如果有人有其他的選擇....

+0

「Gtype」僅出現在第一行嗎? – Ashkan

+0

是的,我是桌子的主席。 – user3091668

回答

2

用awk:

awk 'NR==1{for (i=1; i<=NF; i++) if ($i ~ /Gtype/) a[i]; 
    else printf "%s%s", $i, OFS; print ""; next} 
    {for (i=1; i<=NF; i++) if (!(i in a)) printf "%s%s", $i, OFS; print "" }' file 
Log.NE122 Log.NE144 
-0.33  1.0 
+0

嗨Anubhava,我有一個幾乎相似的問題。我的字符串就像這個'RT12-ABS-NSA'或像這個'ADM_THO_CVL2000'。然而,當我改變你的腳本部分去尋找那個字符串時,什麼都沒有發生。 你有什麼線索爲什麼? –

+0

@AndyK:如果沒有查看您的樣本數據和預期結果,很難提出任何建議。如果可能的話,我建議創建一個問題,並提供所有相關的細節。 – anubhava

+0

道歉,Anubhava。你的解決方案有效我已經爲我的目的修改了它 'awk -F「;」 'NR == 1 {for(i = 1; i <= NF; i ++)if($ i〜/ Gtype /)a [i]; else printf「%s%s」,$ i,OFS;打印「」;下一步} {for(i = 1; i <= NF; i ++)if(!(i in a))printf「%s%s」,$ i,OFS; print「」}}' 但它刪除了我的分號並給我空間。 –

2

您也可以嘗試使用 'data.table' 包和NULL指定列:

dt <- data.table(df) 
dt[, colToDelete := NULL] 

「數據.table「試圖在不需要複製的情況下完成大部分操作。您在data.frame上執行的方式需要進行復制。

+0

'setDT(df)'甚至可以通過引用轉換來防止'data.frame'到'data.table'的拷貝。 'setDT(df)[,col_to_delete:= NULL]' – Arun

相關問題