Добавьте пробел между числом и условием специального символа R
Я пытаюсь использовать базовые вызовы stringr или R для условного добавления пробела для экземпляров в большом векторе, где есть числовое значение, а затем специальный символ - в этом случае знак $ без пробела. str_pad, по-видимому, не допускает опорные векторы.
Например, для:
$ 6,88$7,34
Я хотел бы добавить пробел после последнего числа и перед следующим знаком доллара:
6,88$7,34
Спасибо!
2 ответа
Это будет работать, если вы работаете с векторной строкой:
mystring<-as.vector('$6.88$7.34 $8.34$4.31')
gsub("(?<=\\d)\\$", " $", mystring, perl=T)
[1] "$6.88 $7.34 $8.34 $4.31"
Это включает в себя случаи, когда уже есть место.
По поводу вопроса, заданного в комментариях:
mystring2<-as.vector('Regular_Distribution_Type† Income Only" "Distribution_Rate 5.34%" "Distribution_Amount $0.0295" "Distribution_Frequency Monthly')
gsub("(?<=[[:alpha:]])\\s(?=[[:alpha:]]+)", "_", mystring2, perl=T)
[1] "Regular_Distribution_Type<U+2020> Income_Only\" \"Distribution_Rate 5.34%\" \"Distribution_Amount $0.0295\" \"Distribution_Frequency_Monthly"
Обратите внимание, что \ появляется из-за вложенных кавычек в векторе, не должно иметь никакого значения. Также <U+2020>
появляется из-за кодирования специального символа.
Объяснение регулярного выражения:
(?<=[[:alpha:]])
Эта первая часть - позитивный взгляд, созданный ?<=
в основном это выглядит позади всего, что мы пытаемся сопоставить, чтобы убедиться, что то, что мы определяем в обзоре, есть. В этом случае мы ищем [[:alpha:]]
который соответствует буквенному символу.
Затем мы проверяем пустое пространство с \s
в R мы должны использовать двойной выход, так \\s
это то, что мы пытаемся соответствовать.
Наконец мы используем (?=[[:alpha:]]+)
, который является положительным прогнозом, определяемым ?=
это проверяет, чтобы убедиться, что наше совпадение сопровождается другой буквой, как описано выше.
Логика состоит в том, чтобы найти пробел между буквами и сопоставить пробел, который затем заменяется gsub, с _
Посмотреть все регулярные выражения здесь
Если есть только один экземпляр, используйте sub
захватить цифру и $
отдельно и при замене добавить пробел между обратными ссылками захваченной группы
sub("([0-9])([$])", "\\1 \\2", v1)
#[1] "$6.88 $7.34"
Или с регулярным выражением
gsub("(?<=[0-9])(?=[$])", " ", v1, perl = TRUE)
данные
v1 <- "$6.88$7.34"