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.