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

99

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

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

TekTimmy
источник
классический случай чего-то легкого в 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
32

Смотрите ?format:

> format(1e6, big.mark=",", scientific=FALSE)
[1] "1,000,000" 
>   
Дирк Эддельбюттель
источник
11

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

library(scales)    
comma_format()(1000000)
MatthewR
источник
Функция 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, что позволяет для точного контроля как Числовые отображаются на графиках и диаграммах.

Артур Смолл
источник