Edge Условный Пробел Проблема R - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь очистить длинный символьный вектор и получаю крайний случай, когда разделение следующего формата текста невозможно: $ 4.917.10%

Вопрос в том, как установить условный пробел так, чтобы текст выглядел следующим образом: 4,91 долл. США 7,10%.

Вектор называется «test9», а сценарий, который очищает типичные ситуации, в которых перед символом «-» стоит:

gsub("(?=[-])", " ", test9, perl = TRUE)

Пограничный регистр встречается нечасто, но есть особенность вектора, для которой необходимо скорректировать. Не существует фиксированного числа цифр слева от десятичной дроби (будь то выражение $ или%), но всегда есть две десятичных дроби справа от десятичной дроби, что заставляет меня думать, что условное приближение - это, вероятно, путь.

Вот пример большого куска одного элемента вектора:

28,00 $ 25,0518,09%

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Вот еще один вариант.

gsub("(?<=\\.\\d{2})(?!%)", " ", "$28.00$25.0518.09%", perl = TRUE)
# [1] "$28.00 $25.05 18.09%"

Мы имеем положительный взгляд (?<=\\.\\d{2}), ищем точку и две цифры, и отрицательный прогноз (?!%) для%.


В более общем смысле, я думаю, у вас также может быть "$ 28,00 $ 25,0518,09% 18,09%", и в этом случае нам нужно что-то еще:

gsub("((?<=\\.\\d{2})|(?<=%))(?=[\\d$])", " ", "$28.00$25.0518.09%18.09%", perl = TRUE)
# [1] "$28.00 $25.05 18.09% 18.09%"

Теперь у нас есть либо положительный взгляд за точкой и двумя цифрами, либо положительный взгляд за%, а также положительный взгляд на цифру или конец символа.


Если я правильно понимаю, что ваша общая проблема имеет вид «$ 28,00 $ 25,0518,09% -7,10% $ 25,05 $ 25,05 $ 25,05», то мы можем использовать почти то же решение, что и последнее:

gsub("((?<=\\.\\d{2})|(?<=%))(?=[\\d$-])", " ", "$28.00$25.0518.09%-7.10%$25.05-$25.05$25.05", perl = TRUE)
# [1] "$28.00 $25.05 18.09% -7.10% $25.05 -$25.05 $25.05"
0 голосов
/ 13 января 2019

Один из вариантов - сделать это в два этапа. Сначала вставьте пробел после каждого второго десятичного знака. Затем удалите ненужное пространство, которое вставляет перед %

x = '$28.00$25.0518.09%' 
y = gsub('(\\.\\d{2})', '\\1 ', x, perl = T) #insert space after decimals
trimws(gsub('\\s%', '% ', y))  # move space from before % to after %
# "$28.00 $25.05 18.09%"

Это также должно работать для более общих случаев @Julius, описанных

x = "$28.00$25.0518.09%18.09%"  # "$28.00 $25.05 18.09% 18.09%"
x = "$28.00$25.0518.09%-7.10%$25.05-$25.05$25.05" # "$28.00 $25.05 18.09% -7.10% $25.05 -$25.05 $25.05"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...