Розділювач комами для чисел у R?


99

Чи існує функція в R, щоб відображати великі числа, розділені комами?

тобто від 1000000до 1,000,000.


класичний випадок чогось легкого в Excel і смішно складного в R
Кропива

Відповіді:


134

Ви можете спробувати або format, або prettyNum, але обидві функції повертають вектор символів. Я б використовував це лише для друку.

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

EDIT: Як каже Майкл Кіріко в коментарі:

Майте на увазі, що вони мають побічним ефектом заповнення друкованих рядків порожнім простором, наприклад:

> 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
scales :: 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.