Удалить выбранные пробелы из строки в R

#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 и был бы заинтересован в логике, лежащей в основе.