Separator przecinka dla liczb w R?


99

Czy w R jest funkcja wyświetlająca duże liczby oddzielone przecinkami?

tj. od 1000000do 1,000,000.


klasyczny przypadek czegoś łatwego w Excelu i absurdalnie skomplikowanego w R
Nettle

Odpowiedzi:


138

Możesz wypróbować format lub prettyNum, ale obie funkcje zwracają wektor znaków. Użyłbym tego tylko do drukowania.

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

EDYCJA: Jak mówi Michael Chirico w komentarzu:

Należy pamiętać, że mają one efekt uboczny wypełniania drukowanych ciągów pustą przestrzenią, na przykład:

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

Dodaj trim=TRUEdo formatlub, preserve.width="none"aby prettyNumtemu zapobiec:

> 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
Należy pamiętać, że ich efekt uboczny polega na wypełnieniu drukowanych ciągów spacją, na przykład prettyNum(c(123,1234),big.mark=","):; daje " 123" "1,234". dodać trim=Tdo formatlub, preserve.width="none"aby prettyNumtemu zapobiec.
MichaelChirico

@MichaelChirico Dzięki za dodatkowe informacje. Dodałem to do odpowiedzi.
Joris Meys

Zauważ, że jeśli ustawisz również cyfry dla miejsc dziesiętnych, jeśli masz wektor, może to się nie udać, jeśli liczby są całkiem inne. Z pomocy „Wektory numeryczne są kodowane z minimalną liczbą miejsc dziesiętnych potrzebną do wyświetlenia wszystkich elementów do co najmniej cyfr znaczących. Jeśli jednak wszystkie elementy mają końcowe zera, liczba miejsc dziesiętnych jest zmniejszana do nsmall”
micstr

1
Więc format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)daje "12 345 678,0000" "0,0012", więc wystarczająco dużo można zobaczyć. tzn. formatowanie miejsc nie jest wykonywane element po elemencie. Złapał mnie, więc chciałem się tym podzielić.
micstr

Spędziłem trochę czasu próbując znaleźć, scientificco jest ukryte w stogu siana argumentów format. Dzięki!
MichaelChirico


11

Inne odpowiedzi oczywiście działały - ale zawsze korzystałem

library(scales)    
comma_format()(1000000)

Funkcja comma_format obsługuje tylko liczby całkowite.
Ven Yao

3
Jest to bardzo późno odpowiedzi, a to może być prawdą, że w przeszłości comma_formatnie obsługiwać liczb rzeczywistych, ale teraz można wykonać następujące czynności: scales::comma_format(digits = 12)(1000000.789)co skutkuje w następujących przypadkach: "1,000,000.789".
steveb

2
scales :: comma (1000000) wydaje się warte wspomnienia.
Joe

3

Myślę, że komentarz Joe do MatthewR stanowi najlepszą odpowiedź i powinien zostać podkreślony:

Od września 2018 r. scalesPakiet (część Tidyverse) robi dokładnie to:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

scalesPakiet wydaje się odgrywać bardzo ładnie ggplot2, co pozwala na precyzyjną kontrolę, jak Liczby wyświetlane są na działkach i wykresów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.