删除指定字段以外的字符串

Remove string except in specified fields

我希望使用 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

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

代码应该类似于:

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

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

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

感谢您提供的任何帮助!

你可以使用这个:

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

这里我们使用negative lookbehind,可以解释为“如果你没有看到左边的……就匹配”。注意:这仅适用于 sub 如果您使用 perl = T.

使用

(?<!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