【问题标题】:delete special characters from a text file after the first element in r从文本文件中删除 r 中第一个元素之后的特殊字符
【发布时间】:2019-02-26 09:25:27
【问题描述】:

我正在尝试在 R 中使用 read.table() 读取文本文件。R 不会读取 # 之后的任何内容。但是,文本中有与 cmets 无关的磅符号。我想删除不需要的 # 符号而不将 cmets 添加到数据框中。

幸运的是,我想要保留的所有磅符号都在每一行的第一个元素中。所以基本上我需要删除所有不在行的第一个元素中的# 符号。

2018-08-14 00:00:42 102.18.18.2  
2018-08-15 00:00:47 223.45.67.8    
2018-08-15 00:00:48 026.15.65.0    
2018-08-15 00:00:49 924.43.47.0    
2018-08-15 00:00:49 122.45.#67.9

我想在第一行保留井号,并在最后一行删除导致数据框出现问题的井号。

【问题讨论】:

    标签: r text-editor


    【解决方案1】:

    您可以使用正则表达式中称为捕获组的功能来做到这一点。

    只需在支持使用 RegEx 查找文本的编辑器中打开您的文件,例如 VS Code。

    在“查找”框中,输入:(.+)(#)

    在替换框中,写:$1

    单击全部替换应删除文本之间的所有 # 个字符。

    或者,您也可以编写一个脚本来执行此操作。

    【讨论】:

      【解决方案2】:

      这是一个可能的纯 R 解决方案:

      MWE

      首先让我们把你的问题变成一个完整的 MWE (https://stackoverflow.com/help/mcve):

      cat(
      '#2018-08-14 00:00:42 102.18.18.2',
      '2018-08-14 00:00:42 102.18.18.2',  
      '2018-08-15 00:00:47 223.45.67.8',    
      '2018-08-15 00:00:48 026.15.65.0',    
      '2018-08-15 00:00:49 924.43.47.0',    
      '2018-08-15 00:00:49 122.45.#67.9', sep = '\n', file = 'mytable.txt')
      

      这会在您的工作目录中创建一个我们可以读取的文件。

      解决方案

      (x <- readLines('mytable.txt')) 
      (y <- gsub('(?<!^)#', '', x, perl = TRUE))
      read.table(text = y)
      
      ##           V1       V2          V3
      ## 1 2018-08-14 00:00:42 102.18.18.2
      ## 2 2018-08-15 00:00:47 223.45.67.8
      ## 3 2018-08-15 00:00:48 026.15.65.0
      ## 4 2018-08-15 00:00:49 924.43.47.0
      ## 5 2018-08-15 00:00:49 122.45.67.9
      

      我用() 包裹了每一行,这样你就可以看到输出了。在实际应用中,我不会包含它们。

      神奇的发生在gsub('(?&lt;!^)#', '', x, perl = TRUE) 行。它使用 (?&lt;!^)# 的 Negative Lookbehind (https://www.regular-expressions.info/lookaround.html),可以读作:

      • #(任何井号)但是
      • ?(什么)&lt;(来之前)
      • !(不是)
      • ^(行首)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多