R удалить часть строки, используя gsub с подстановочным знаком
У меня есть датафрейм, где я хочу сделать две вещи со значениями:
- Добавьте пробел в качестве разделителя тысяч
- Удалить де нулей после десятичной дроби
Мне удалось сделать обе эти вещи по отдельности, но я, кажется, не могу объединить их.
Для того чтобы удалить конечные нули, я использовал:
cat <- c("A", "B", "C")
value <- c(1234.5, 1, 12.34)
df <- data.frame(cat, value)
df$value2 <- gsub("\\.00$","",df$value)
df
cat value value2
1 A 1234.50 1234.5
2 B 1.00 1
3 C 12.34 12.34
И чтобы добавить разделитель тысяч я использовал:
df$value2 <- format(df$value, big.mark=" ")
df
cat value value2
1 A 1234.50 1 234.50
2 B 1.00 1.00
3 C 12.34 12.34
Теперь я хочу объединить два, но если я сделаю это, используя следующий код:
df$value2 <- gsub("\\.00$","",format(df$value, big.mark=" "))
df
cat value value2
1 A 1234.50 1 234.50
2 B 1.00 1
3 C 12.34 12.34
Замыкающие нули удаляются только в тех случаях, которые заканчиваются двумя нулями. Я пытался добавить |\\..*0$
так что он также смотрит на нули с числом перед ним, но это удаляет число после десятичной дроби, а это не то, что я хочу.
2 ответа
Вы можете использовать аргумент drop0trailing
format(value, big.mark=" ", drop0trailing=TRUE)
# [1] "1 234.5" " 1" " 12.34"
Работает с formatC
а также с той разницей, что по умолчанию вы не ставите начальные пробелы:
formatC(value, big.mark=" ", drop0trailing=TRUE)
# [1] "1 234" "1" "12.34"
Или используйте trim
аргумент format
:
format(value, big.mark=" ", drop0trailing=TRUE, trim = TRUE)
# [1] "1 234.5" "1" "12.34"
Это будет работать, но ваши числа будут преобразованы в строки / символы!
df$value2 <- gsub("0+$|\\.0+$","", as.character( format(df$value, big.mark=" ")))
# cat value value2
# 1 A 1234.50 1 234.5
# 2 B 1.00 1
# 3 C 12.34 12.34