Как убрать все, кроме последней запятой в R

Я заинтересован в удалении всех запятых, кроме последней, если она есть, из суммы в долларах в строке. Например, допустим, у меня есть

x <- c("$1,450", "$1,254,345,", "$2,423,123")

Меня интересует что-то вроде этого:

x
## [1] "$1450" "$1254345," "$2423123"

Итак, сначала я хочу проверить, есть ли запятая в самом конце. Если да, я удалю все, кроме последнего. Если в конце нет запятой, я просто удаляю их все.

3 ответа

Решение

regex полезно

gsub(",(?!$)", "", x, perl=TRUE)
# "$1450"     "$1254345," "$2423123"

Объяснение шаблона регулярных выражений ",(?!$)"

, соответствует всем запятым
(?!$) отрицательный прогноз, исключая запятые в конце строки $

Вот 2 решения

gsub(",(\\d)", "\\1", x)

запятая, за которой следует цифра, заменяется цифрой (группа захвата)

gsub(",(?=\\d)", "", x, perl = T)

запятая должна сопровождаться цифрой для замены (положительный взгляд)

В обоих случаях \\d можно заменить на . если вы хотите сопоставить любой символ вместо цифр:

gsub(",(.)", "\\1", x)
gsub(",(?=.)", "", b, perl = T)

Вы можете достичь этого, комбинируя gsub() а также str_sub() в ifelse(), Вот пример

x1 <- c("$1,450", "$1,254,345,", "$2,423,123")
x1
library(stringr)
x2 <- ifelse(str_sub(x1, -1, nchar(x1)) == ",",
             paste0(gsub(",", "", str_sub(x1, 1, nchar(x1)-1)), ","),
             gsub(",", "", str_sub(x1, 1, nchar(x1))))
x2
Другие вопросы по тегам