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