删除指定字段以外的字符串
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 " ")
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
我希望使用 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 " ")
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