【问题标题】:Remove string except in specified fields删除除指定字段外的字符串
【发布时间】:2020-09-22 17:24:21
【问题描述】:

我希望使用 str_replace 或 gsub 从我的数据框中的列中删除字符“ WD ”并将其替换为“ ”。但是,列中的某些字段我不希望删除“WD”字符。请注意,我正在处理的数据中有超过 8,000 个特征,因此无需输入我想更改的每个字段字符串的一行代码是必不可少的。

df = PA_prec

COLUMN

PA CRAWFORD MEADVILLE WD 02

PA CRAWFORD TITUSVILLE WD 02

PA BLAIR HOLLIDAYSBURG WD 01

PA BLAIR ALTOONA WD 03

目标:我希望删除所有“WD”字符,除了 PA CRAWFORD TITUSVILLE 和 PA BLAIR HOLLIDAYSBURG。

代码应该类似于:

PA_prec$COLUMN <- str_replace(PA_prec$COLUMN, " WD ", " ")

PA_prec$COLUMN <- gsub("\\.", "", PA_prec$COLUMN)

...但我需要排除上面列出的两个字段。

感谢您提供的任何帮助!

【问题讨论】:

    标签: r regex str-replace gsub


    【解决方案1】:

    你可以用这个:

    sub("(?<!TITUSVILLE |HOLLIDAYSBURG )WD ", "", x, perl = T)
    

    这里我们使用否定的lookbehind,它可以被修饰为“如果你没有看到左边的...则匹配”。注意:这仅适用于sub,如果您使用perl = T

    【讨论】:

    • 太棒了!这似乎奏效了。但是,你知道我是否可以将 WD 识别为“WD”,这样我就可以确保我只删除前后有空格的字符 WD?我尝试在您发送的代码中在 WD 的正面和背面添加一个空格,但它不起作用。谢谢:)
    • 请参阅编辑后的解决方案:现在删除WD,而不会留下任何多余的空白。
    【解决方案2】:

    使用

    (?<!TITUSVILLE|HOLLIDAYSBURG)\sWD\s
    

    poof

    说明

    --------------------------------------------------------------------------------
      (?<!                     look behind to see if there is not:
    --------------------------------------------------------------------------------
        TITUSVILLE               'TITUSVILLE'
    --------------------------------------------------------------------------------
       |                        OR
    --------------------------------------------------------------------------------
        HOLLIDAYSBURG            'HOLLIDAYSBURG'
    --------------------------------------------------------------------------------
      )                        end of look-behind
    --------------------------------------------------------------------------------
      \s                       whitespace (\n, \r, \t, \f, and " ")
    --------------------------------------------------------------------------------
      WD                       'WD'
    --------------------------------------------------------------------------------
      \s                       whitespace (\n, \r, \t, \f, and " ")
    

    R code:

    df <- data.frame(COLUMN=c("PA CRAWFORD MEADVILLE WD 02","PA CRAWFORD TITUSVILLE WD 02","PA BLAIR HOLLIDAYSBURG WD 01","PA BLAIR ALTOONA WD 03"))
    df$COLUMN <- sub("(?<!TITUSVILLE|HOLLIDAYSBURG)\\sWD\\s", " ", df$COLUMN, perl=TRUE)
    df
    

    输出:

                            COLUMN
    1     PA CRAWFORD MEADVILLE 02
    2 PA CRAWFORD TITUSVILLE WD 02
    3 PA BLAIR HOLLIDAYSBURG WD 01
    4          PA BLAIR ALTOONA 03
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 2016-11-08
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      相关资源
      最近更新 更多