【问题标题】:Delete columns in text files with specific string删除具有特定字符串的文本文件中的列
【发布时间】:2014-04-17 10:20:49
【问题描述】:

我想删除带有特定字符串“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 中是否有效。如果有人有其他选择......

【问题讨论】:

  • “Gtype”是否只出现在第一行?
  • 是的,我是表的 HEAD。

标签: r string bash specification-pattern


【解决方案1】:

使用 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

【讨论】:

  • 嗨 Anubhava,我有一个几乎类似的问题。我的字符串会是这样的RT12-ABS-NSA 或这样的ADM_THO_CVL2000。然而,当我更改脚本的一部分以查找该字符串时,什么都没有发生。你有什么线索吗?
  • @AndyK:如果不查看您的样本数据和预期结果,很难提出任何建议。我建议尽可能创建一个包含所有相关详细信息的问题。
  • 抱歉,阿努巴瓦。您的解决方案有效。我已经为我的目的修改了它awk -F";" 'NR==1{for (i=1; i&lt;=NF; i++) if ($i ~ /Gtype/) a[i]; else printf "%s%s", $i, OFS; print ""; next} {for (i=1; i&lt;=NF; i++) if (!(i in a)) printf "%s%s", $i, OFS; print "" }',但它删除了我的分号并给了我空间。
  • 我的问题在这里。你介意看看吗? stackoverflow.com/questions/23134450/…?
  • 默认 FS 和 OFS 是 1 个或多个空格或制表符。在这个问题中,从问题看来,默认值会很好用
【解决方案2】:

您也可以尝试使用“data.table”包并将列分配为 NULL:

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

"data.table" 尝试在不复制的情况下完成大部分操作。您在data.frames 上的操作方式需要制作副本。

【讨论】:

  • setDT(df) 甚至可以防止将data.frame 复制到data.table - 通过引用转换:)。 setDT(df)[, col_to_delete := NULL]
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 2022-11-11
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
相关资源
最近更新 更多