Удалить выбранные пробелы из строки в R - PullRequest
1 голос
/ 13 марта 2019

Я действительно застрял в какой-то момент, пытаясь избавиться от некоторых пробелов в строке символов, которые я получил из 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 Ответ

0 голосов
/ 13 марта 2019

Вы можете использовать

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
  • Если вы работаете с текстами Unicode, можно использовать регулярное выражение PCRE (включается с perl=TRUE) с глаголом \s и (*UCP) (оно будет соответствовать мягким / жестким пробелам и т. д..)
  • Если вы используете (?<=\\d) lookbehind и (?=\\d) lookahead вместо захвата групп, тексты не используются (не добавляются для сопоставления значений) и, таким образом, не удаляются, поэтому нет необходимости в обратных ссылках вшаблон замены.
...