2009-10-17 10 views
38

Wysyłam ramkę danych do html przez xtable. Chcę dodać przecinki do liczb w kilku kolumnach tabeli. Pomyślałem, że zanim zrobiłem własną metodę wklejania, sprawdziłem, czy jest w to wbudowany sposób.dodaj przecinki do numeru dla wyjścia

Odpowiedz

47

może warto rozważyć przekształcenie kolumny stosując formatC

> formatC(1:10 * 100000, format="d", big.mark=",") 
[1] "100,000" "200,000" "300,000" "400,000" "500,000" "600,000" 
[7] "700,000" "800,000" "900,000" "1,000,000" 
12

Ogromne podziękowania Jonathan Chang na jego odpowiedź. formatC wygląda niezwykle użyteczną funkcję. To zainspirowało mnie do przeczytania dokumentacji, w której znalazłem prettyNum, co okazało się całkiem eleganckim rozwiązaniem podobnego problemu, jaki miałem. Oto minimalny wykonalny przykład tego, co zrobiłem, aby dodać przecinki do liczb w ramce danych o nazwie enrollment.summary.

xtable(prettyNum(enrollment.summary,big.mark=","))

+1

'formatC' jest [funkcja] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/formatc.html) w pakiecie 'base', a nie pakiet. W przyszłości dołącz przykłady i pokaż zachowanie w odpowiedzi. Na przykład rozważ zastąpienie 'enrollment.summary' przez' mtcars': 'prettyNum (mtcars, big.mark =", ")' zwraca macierz znaków, w której kolumny odpowiadają kolumnom w danych 'mtcars' data.frame, a liczby są wydrukowane. –

+2

Zauważ również, że 'prettyNum' umieszcza twój wynik w pustym polu (potencjalnie niechcianym): prettyNum (c (123,1234), big.mark =", "); daje "123" "1,234". add preserve.width = "none", aby temu zapobiec. – MichaelChirico

2

'format.args' formatować pewne podsumowania z dplyr, tutaj jest boilerplate kod:

df %>% summarise(mu=mean(big_values), min=min(big_values), max=max(big_values)) %>% mutate_each(funs(prettyNum(., big.mark=",")))

2

Oto późna odpowiedź, ale można też użyć scales::comma_format następująco:

library(scales) 
values <- c(1000000.789, 8888.23) 
comma_format(digits = 12)(values) 
## [1] "1,000,000.789" "8,888.230" 

Dla wartości całkowitych tylko, można po prostu użyć przecinka:

int_vals <- c(1234, 5678) 
comma(int_vals) 
## [1] "1,234" "5,678"