Разделитель запятых для чисел в R?


99

Есть ли в R функция для отображения больших чисел, разделенных запятыми?

т.е. от 1000000до 1,000,000.


классический случай чего-то легкого в Excel и смехотворно сложного в R
Крапива

Ответы:


134

Вы можете попробовать формат или prettyNum, но обе функции возвращают вектор символов. Я бы использовал это только для печати.

> prettyNum(12345.678,big.mark=",",scientific=FALSE)
[1] "12,345.68"
> format(12345.678,big.mark=",",scientific=FALSE)
[1] "12,345.68"

РЕДАКТИРОВАТЬ: Как говорит Майкл Кирико в комментарии:

Имейте в виду, что они имеют побочный эффект заполнения напечатанных строк пустым пространством, например:

> prettyNum(c(123,1234),big.mark=",")
[1] "  123" "1,234"

Добавьте trim=TRUEк formatили preserve.width="none"к, prettyNumчтобы предотвратить это:

> prettyNum(c(123,1234),big.mark=",", preserve.width="none")
[1] "123"   "1,234"
> format(c(123,1234),big.mark=",", trim=TRUE)
[1] "123"   "1,234"

5
Имейте в виду, что они имеют побочный эффект заполнения напечатанных строк пробелом, например prettyNum(c(123,1234),big.mark=","):; дает " 123" "1,234". добавить trim=Tв formatили preserve.width="none"для prettyNumпредотвращения этого.
MichaelChirico

@MichaelChirico Спасибо за дополнительную информацию. Я добавил это к ответу.
Джорис Мейс

Обратите внимание, если вы также устанавливаете цифры для десятичных знаков, если у вас есть вектор, это может пойти наперекосяк, если числа будут совсем другими. Из справки «Числовые векторы кодируются с минимальным количеством десятичных знаков, необходимых для отображения всех элементов, по крайней мере, до значащих цифр. Однако, если все элементы затем имеют конечные нули, количество десятичных знаков уменьшается до nsmall»
micstr

1
Таким образом, format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)получается «12,345,678.0000» «0,0012», чтобы можно было увидеть достаточно. т.е. форматирование мест не выполняется поэлементно. Поймал меня так хотел этим поделиться.
micstr

Некоторое время потратил на то, чтобы найти то, scientificчто спрятано в стоге сена аргументов format. Спасибо!
MichaelChirico


11

Другие опубликованные ответы, очевидно, работают, но я всегда использовал

library(scales)    
comma_format()(1000000)

Функция comma_format может работать только с целыми числами.
Вен Яо

3
Это очень поздно ответ, и это может быть правдой , что в прошлом comma_formatне обрабатывать реальные цифры , но теперь вы можете сделать следующее: scales::comma_format(digits = 12)(1000000.789)что приводит к следующему: "1,000,000.789".
Steveb

2
scale :: comma (1000000) заслуживает упоминания.
Джо

3

Я думаю, что комментарий Джо к MatthewR предлагает лучший ответ, и его следует выделить:

По состоянию на сентябрь 2018 года scalesпакет (часть Tidyverse) делает именно это:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

scalesПакет , кажется, играет очень хорошо с ggplot2, что позволяет для точного контроля как Числовые отображаются на графиках и диаграммах.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.