从R中删除单词

时间:2014-04-14 18:03:35

标签: regex r

如何删除多个单词和空行?我正在使用readLines将大文本文件导入到R中。它由10,000多页组成。最终我试图创建一个数据框。

每个页面都有以下两行,我想在ONE STEP中删除空行。

Set reorder point
Plan category: P

下面是一个名为MM的示例文本文件:

设置再订货点 计划类别:P

Plnt SLoc Material           Description              L.T MRP Stat Auto MatSG PC PN    Freq  Qty    CFreq     CQty Cur.RPt New.RPt CurRepl NewRepl Updt    Cost   ServStock  Unit  OpenMatResb DFStorLocLevel
0231 0002 GB.C152260-00001   ASSY PISTON & SEAL/O-RING 44  PD       X    A    A  A     18     136                     30      29      50      43         24.88      51.000  EA
0231 0002 WH.112734          MOTOR REDUCER, THREE-PHAS 41  PD       X    B    B  A     16      17                      3       3       5       4        483.87       1.000  EA      X
Set reorder point
Plan category: P

Plnt SLoc Material           Description              L.T MRP Stat Auto MatSG PC PN    Freq  Qty    CFreq     CQty Cur.RPt New.RPt CurRepl NewRepl Updt    Cost   ServStock  Unit  OpenMatResb DFStorLocLevel
0231 0002 WH.920569          SPINDLE MOTOR MINI O      22  PD       X    A    A  A     69      85                     15       9      25      13        680.91      21.000  EA
0231 0002 GB.C150583-00001   VALVE-AIR MDI             64  PD       X    A    A  A     16     113                     50      35      80      52         19.96     116.000  EA
Set reorder point
Plan category: P

Plnt SLoc Material           Description              L.T MRP Stat Auto MatSG PC PN    Freq  Qty    CFreq     CQty Cur.RPt New.RPt CurRepl NewRepl Updt    Cost   ServStock  Unit  OpenMatResb DFStorLocLevel
0231 0002 FG.124-0140        BEARING                   32  PD       X    A    A  A     36     205                     35      32      50      48         21.16      55.000  EA
0231 0002 WP.254997          BEARING,BALL .9843 X 2.04 52  PD       X    A    A  A     18     155                     50      39     100      58          2.69     181.000  EA
Set reorder point
Plan category: P

我在两个步骤中尝试了以下代码,但它删除了一个或另一个并且没有删除该行:

gsub("Set reorder point", "", MM)
gsub("Plan category: P", "", MM)

此删除需要在R内完成。非常感谢提前。

3 个答案:

答案 0 :(得分:2)

正如Ironholds建议的那样,gsub是要走的路,你可以试试:

df<-readLines("MM.txt")

df.clean<-gsub("^Set.*$|^Plan.*$","",df)

这将替换以“Set”开头的第1行,以“Plan”开头,用“”,空行

现在只剩下空行,可以用

删除

df.clean<-df.clean[df.clean!=""]

此处,^$表示行匹配索引器的开头和结尾。

答案 1 :(得分:1)

您可能需要查看“gsub”,并使用它来查找行,然后将其替换为(gsub(x = object, pattern = "thing_you_want_to_replace", replacement = "")。或者,不是使用R,而是先通过“awk”脚本运行它 - 比如

awk {gsub("(Set reorder point|Plan category: P", "");
     print >> "the_output_file.txt"} the_input_file.txt

然后来自readLines()

the_output_file.txt

这可以避免任何可能的尴尬,试图消毒已经处理过的东西。

答案 2 :(得分:1)

df <- readLines("MM.txt")
dfClean <- grep("^Set.*$|^Plan.*$|^$", df, value = TRUE, invert = TRUE); dfClean

以下是使用的正则表达式的解释:

^ Set。 $:替换以&#39; Set&#39;开头的行。 (使用元字符^)到行的末尾(。 $)   | :元字符将多个表达式组合成单个表达式 计划。 $:替换以&#39;计划&#39;开头的行。 (使用元字符^)到行的末尾(。 $)  ^ $:删除空行