Pemisah koma untuk angka di R?

99

Apakah ada fungsi di R untuk menampilkan angka besar yang dipisahkan dengan koma?

yaitu, dari 1000000hingga 1,000,000.

TekTimmy
sumber
kasus klasik dari sesuatu yang mudah di Excel dan sangat rumit di R
Nettle

Jawaban:

134

Anda dapat mencoba format atau prettyNum, tetapi kedua fungsi mengembalikan vektor karakter. Saya hanya akan menggunakannya untuk mencetak.

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

EDIT: Seperti yang dikatakan Michael Chirico di komentar:

Ketahuilah bahwa ini memiliki efek samping mengisi string yang dicetak dengan spasi kosong, misalnya:

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

Tambahkan trim=TRUEke formatatau preserve.width="none"ke prettyNumuntuk mencegah hal ini:

> 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"
Joris Meys
sumber
5
Ketahuilah bahwa ini memiliki efek samping mengisi string yang dicetak dengan spasi kosong, misalnya prettyNum(c(123,1234),big.mark=","):; memberi " 123" "1,234". tambahkan trim=Tke formatatau preserve.width="none"untuk prettyNumuntuk mencegah hal ini.
MichaelChirico
@MichaelChirico Terima kasih atas informasi tambahan. Saya telah menambahkannya ke jawaban.
Joris Meys
Perhatikan jika Anda juga menyetel digit untuk tempat desimal, jika Anda memiliki vektor, ini bisa menjadi kacau jika nomornya sangat berbeda. Dari bantuan "Vektor numerik dikodekan dengan jumlah minimum tempat desimal yang diperlukan untuk menampilkan semua elemen hingga setidaknya digit digit signifikan. Namun, jika semua elemen memiliki nol di belakangnya, jumlah tempat desimal dikurangi hingga nsmall"
micstr
1
Jadi format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)berikan `" 12.345.678.0000 "" 0,0012 "jadi cukup bisa dilihat. yaitu pemformatan tempat tidak dilakukan berdasarkan elemen demi elemen. Menangkap saya begitu ingin berbagi ini.
micstr
Menghabiskan beberapa waktu untuk mencoba menemukan scientificyang tersembunyi di tumpukan jerami argumen format. Terima kasih!
MichaelChirico
32

Lihat ?format:

> format(1e6, big.mark=",", scientific=FALSE)
[1] "1,000,000" 
>   
Dirk Eddelbuettel
sumber
11

Jawaban lain yang diposting jelas berfungsi - tetapi saya selalu menggunakan

library(scales)    
comma_format()(1000000)
MatthewR
sumber
Fungsi comma_format hanya dapat menangani integer.
Ven Yao
3
Ini adalah respon sangat terlambat, dan itu mungkin benar di masa lalu yang comma_formattidak menangani bilangan real tapi sekarang Anda dapat melakukan hal berikut: scales::comma_format(digits = 12)(1000000.789)yang hasil berikut ini: "1,000,000.789".
steveb
2
scale :: comma (1000000) sepertinya perlu disebutkan.
Joe
3

Saya pikir komentar Joe untuk MatthewR menawarkan jawaban terbaik dan harus disorot:

Mulai Sept 2018, scalespaket (bagian dari Tidyverse) melakukan persis seperti ini:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

The scalespaket tampaknya bermain sangat baik dengan ggplot2, memungkinkan untuk kontrol yang baik bagaimana numeric ditampilkan dalam plot dan grafik.

Arthur Small
sumber