Dấu phẩy ngăn cách cho các số trong R?


99

Có chức năng nào trong R để hiển thị các số lớn được phân tách bằng dấu phẩy không?

tức là, từ 1000000đến 1,000,000.


trường hợp cổ điển của một cái gì đó dễ dàng trong Excel và phức tạp đến mức nực cười trong R
Nettle

Câu trả lời:


134

Bạn có thể thử format hoặc prettyNum, nhưng cả hai hàm đều trả về một vectơ ký tự. Tôi chỉ sử dụng nó để in.

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

CHỈNH SỬA: Như Michael Chirico nói trong nhận xét:

Hãy lưu ý rằng những điều này có tác dụng phụ là đệm các chuỗi được in bằng khoảng trống, ví dụ:

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

Thêm trim=TRUEvào formathoặc preserve.width="none"để prettyNumngăn chặn điều này:

> 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
Hãy lưu ý rằng chúng có tác dụng phụ là đệm các chuỗi được in bằng khoảng trống, ví dụ prettyNum(c(123,1234),big.mark=","):; cho " 123" "1,234". thêm trim=Tvào formathoặc preserve.width="none"để prettyNumngăn chặn điều này.
MichaelChirico

@MichaelChirico Cảm ơn bạn đã cung cấp thêm thông tin. Tôi đã thêm nó vào câu trả lời.
Joris Meys

Lưu ý nếu bạn cũng cài đặt chữ số cho vị trí thập phân, nếu bạn có một vectơ, điều này có thể trở nên tồi tệ nếu các chữ số khá khác nhau. Từ trợ giúp "Vectơ số được mã hóa với số vị trí thập phân tối thiểu cần thiết để hiển thị tất cả các phần tử có ít nhất chữ số có nghĩa. Tuy nhiên, nếu tất cả các phần tử sau đó có số 0 ở cuối, thì số vị trí thập phân sẽ giảm cho đến khi nsmall"
micstr

1
Vì vậy, format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)cho `" 12,345,678,0000 "" 0,0012 "để có thể thấy đủ. tức là định dạng địa điểm không được thực hiện trên cơ sở từng phần tử. Bắt tôi ra nên muốn chia sẻ điều này.
micstr

Đã dành khá nhiều thời gian để cố gắng tìm ra scientificcái được ẩn trong đống đối số format. Cảm ơn!
MichaelChirico


11

Các câu trả lời khác được đăng rõ ràng là có tác dụng - nhưng tôi đã luôn sử dụng

library(scales)    
comma_format()(1000000)

Hàm comma_format chỉ có thể xử lý các số nguyên.
Ven Yao

3
Đây là một phản ứng rất muộn, và nó có thể đúng trong quá khứ mà comma_formatkhông xử lý số thực nhưng bây giờ bạn có thể làm những điều sau đây: scales::comma_format(digits = 12)(1000000.789)mà kết quả trong những điều sau đây: "1,000,000.789".
steveb

2
scale :: comma (1000000) có vẻ đáng được đề cập.
Joe

3

Tôi nghĩ nhận xét của Joe cho MatthewR đưa ra câu trả lời tốt nhất và nên được đánh dấu:

Kể từ tháng 9 năm 2018, scalesgói (một phần của Tidyverse) thực hiện chính xác điều này:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

Các scalesgói dường như chơi rất độc đáo với ggplot2, cho phép kiểm soát tốt về cách numerics được hiển thị trong lô và bảng xếp hạng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.