Я пытаюсь заменить разделитель запятыми на разделитель точек (и наоборот) в числах, в то время как строки могут иметь другие точки и запятые. Я пытался использовать gsub (), но не знаю, как остановить распознавание шаблона замены в виде строки символов.
Например, предположим, у меня есть строка
`Today I bought apples, oranges for 3,55 dollars`
где я хочу заменить запятую на точечный разделитель по цене:
`Today I bought apples, oranges for 3.55 dollars`
Наивный gsub
подход не работает так, как я хочу:
`gsub('[[:digit:]],[[:digit:]]',
'[[:digit:]][.][[:digit:]]',
'Today I bought apples, oranges for 3,55 dollars')`
, что, очевидно, дает [1] "Today I bought apples, oranges for [[:digit:]][.][[:digit:]]5 dollars"
, т. Е. Gsub рассматривает замену как строку символов.
Я не могу предоставить ничего, кроме строки для gsub()
. Что я могу сделать тогда? Я имею в виду, что, возможно, я смогу написать функцию, которая будет соответствовать этому шаблону, затем в основном заменить ,
на .
внутри этого шаблона и поместить его обратно в предложение. Однако я надеюсь, что есть более короткое решение для такой проблемы. Есть идеи?