#string #rstudio #str-replace #gsub #stringr
#строка #rstudio #str-заменить #gsub #stringr
Вопрос:
В какой-то момент я действительно застрял, пытаясь избавиться от некоторых пробелов в моей символьной строке, которую я получил из PDF.
Строка выглядит следующим образом:
[1] " ZUSAMMEN 8 756 3 193 1 456 531 506 1 931 1 780 225 2 059"
Как вы можете видеть, проблема, с которой я сталкиваюсь, заключается в том, что все «тысячи» разделены пробелом, то есть вместо 8756 это 8 756.
Моя проблема в том, что я хочу автоматически удалять только пробелы между тысячами.
Я знаю, как управлять этим вручную, но мне нужен автоматический способ, потому что мне нужно скорректировать пару тысяч наблюдений.
То, что я пробовал, было:
c <- gsub("\s", "", t)
выявление
[1] "ZUSAMMEN875631931456531506193117802252059"
Однако я не знаю, как избавиться только от тех пробелов, которые находятся между цифрами тысяч.
Надеюсь, все понятно! Заранее спасибо, Никлас
Ответ №1:
Вы можете использовать
x <- " ZUSAMMEN 8 756 3 193 1 456 531 506 1 931 1 780 225 2 059"
gsub("(\d) (\d)", "\1\2", x)
Смотрите R демо онлайн.
Чтобы удалить все пробелы, используйте любой из двух приведенных ниже способов:
gsub("(\d)[[:space:]](\d)", "\1\2", x)
gsub("(\d)\s(\d)", "\1\2", x)
gsub("(*UCP)(\d)\s(\d)", "\1\2", x, perl=TRUE)
gsub("(*UCP)(?<=\d)\s(?=\d)", "", x, perl=TRUE)
Примечания
(\d) (\d)
сопоставляет и записывает цифру в группу захвата 1 (с первой(\d)
), затем сопоставляет один пробел, а затем записывает в группу 2 другую цифру. Цифры, которые были захвачены и использованы, будут удалены, если их соответствующие обратные ссылки не используются в шаблоне замены, следовательно,"\1\2"
строка замены содержит их[[:space:]]
является ли класс символов POSIX, который соответствует любому пробелу, аналогичноs
- Если вы работаете с текстами в Юникоде, регулярное выражение PCRE (включенное с помощью
perl=TRUE
) может использоваться с глаголомs
и(*UCP)
(оно будет соответствовать мягким / жестким пробелам и т.д.) - Если вы используете
(?<=\d)
lookbehind и(?=\d)
lookahead вместо захвата групп, тексты не используются (не добавляются для сопоставления значений) и, таким образом, не удаляются, следовательно, нет необходимости в обратных ссылках в шаблоне замены.
Комментарии:
1. Большое вам спасибо, все работает отлично!!! Не могли бы вы, пожалуйста, объяснить логику, лежащую в основе? Я довольно новичок в R и был бы заинтересован в логике, лежащей в основе.