Розділювач комами для чисел у 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.