#r #regex #str-replace #gsub
#r #регулярное выражение #str-заменить #gsub
Вопрос:
Я надеюсь использовать str_replace или gsub, чтобы удалить символы » WD » и заменить их на » » из столбца в моем фрейме данных. Однако в столбце есть определенные поля, из которых я не хочу, чтобы символы «WD» удалялись. Обратите внимание, что в данных, которые я обрабатываю, содержится более 8000 объектов, поэтому строка кода без необходимости вводить каждую строку поля, которую я хотел бы изменить, необходима.
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_prec$COLUMN <- str_replace(PA_prec$COLUMN, " WD ", " ")
или
PA_prec$COLUMN <- gsub("\.", "", PA_prec$COLUMN)
…но мне нужно исключить два поля, перечисленные выше.
Спасибо за любую помощь, которую вы можете предоставить!
Ответ №1:
Вы можете использовать это:
sub("(?<!TITUSVILLE |HOLLIDAYSBURG )WD ", "", x, perl = T)
Здесь мы используем отрицательный взгляд назад, который можно замаскировать как «совпадение, если вы не видите… слева». Примечание: это работает только sub
в том случае, если вы используете perl = T
.
Комментарии:
1. Замечательно! Похоже, это сработало. Однако, знаете ли вы, могу ли я идентифицировать WD как «WD», чтобы я мог убедиться, что удаляю символ WD только там, где спереди и сзади есть пробел? Я попытался добавить пробел в начало и конец WD в отправленном вами коде, и это не сработало. Спасибо 🙂
2. Пожалуйста, смотрите отредактированное решение: теперь это удаляет
WD
, не оставляя лишних пробелов.
Ответ №2:
Использовать
(?<!TITUSVILLE|HOLLIDAYSBURG)sWDs
См. пуф.
Объяснение
--------------------------------------------------------------------------------
(?<! 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 " ")
<a rel="noreferrer noopener nofollow" href="https:///Try it online!» rel=»nofollow noreferrer»>R-код:
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