Разделитель запятых для чисел в 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.