ตัวคั่นด้วยเครื่องหมายจุลภาคสำหรับตัวเลขใน R?


100

มีฟังก์ชันใน R เพื่อแสดงตัวเลขขนาดใหญ่โดยคั่นด้วยเครื่องหมายจุลภาคหรือไม่?

เช่นจากการ10000001,000,000


กรณีคลาสสิกของสิ่งที่ง่ายใน Excel และซับซ้อนอย่างน่าขันใน R
Nettle เมื่อ

คำตอบ:


138

คุณสามารถลองฟอร์แมตหรือ prettyNum ก็ได้ แต่ทั้งสองฟังก์ชันจะส่งกลับเวกเตอร์ของอักขระ ฉันจะใช้สำหรับการพิมพ์เท่านั้น

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

แก้ไข: ดังที่ Michael Chirico กล่าวไว้ในความคิดเห็น:

โปรดทราบว่าสิ่งเหล่านี้มีผลข้างเคียงจากการขยายสตริงที่พิมพ์ด้วยช่องว่างตัวอย่างเช่น:

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

เพิ่มtrim=TRUEไปformatหรือpreserve.width="none"เพื่อprettyNumการป้องกันนี้:

> 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"

6
โปรดทราบว่าสิ่งเหล่านี้มีผลข้างเคียงของการขยายสตริงที่พิมพ์ด้วยช่องว่างตัวอย่างเช่นprettyNum(c(123,1234),big.mark=","); ให้" 123" "1,234". เพิ่มtrim=Tไปformatหรือpreserve.width="none"เพื่อprettyNumการป้องกันนี้
MichaelChirico

@MichaelChirico ขอบคุณสำหรับข้อมูลเพิ่มเติม ฉันได้เพิ่มคำตอบแล้ว
Joris Meys

สังเกตว่าคุณตั้งค่าหลักสำหรับตำแหน่งทศนิยมด้วยหรือไม่หากคุณมีเวกเตอร์สิ่งนี้อาจผิดพลาดได้หากตัวเลขต่างกันมาก จากวิธีใช้ "เวกเตอร์ตัวเลขถูกเข้ารหัสด้วยจำนวนตำแหน่งทศนิยมขั้นต่ำที่จำเป็นในการแสดงองค์ประกอบทั้งหมดเป็นหลักอย่างน้อยจำนวนหลักอย่างไรก็ตามหากองค์ประกอบทั้งหมดมีศูนย์ต่อท้ายจำนวนตำแหน่งทศนิยมจะลดลงจนถึง nsmall"
micstr

1
ดังนั้นformat(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)ให้ "12,345,678.0000" "0.0012" ก็เพียงพอแล้ว กล่าวคือการจัดรูปแบบสถานที่ไม่ได้ทำบนองค์ประกอบตามองค์ประกอบ จับฉันออกไปดังนั้นจึงต้องการแบ่งปันสิ่งนี้
micstr

ที่อยู่ในระบบค่อนข้างบางเวลาพยายามที่จะหาที่ซ่อนอยู่ในกองหญ้าของการขัดแย้งกับscientific formatขอบคุณ!
MichaelChirico


11

คำตอบอื่น ๆ ที่โพสต์เห็นได้ชัดว่าใช้งานได้ - แต่ฉันใช้มาตลอด

library(scales)    
comma_format()(1000000)

ฟังก์ชัน comma_format สามารถจัดการกับจำนวนเต็มเท่านั้น
Ven Yao

3
นี่คือการตอบสนองช้ามากและมันอาจจะเป็นความจริงในอดีตที่comma_formatไม่ได้จัดการตัวเลขจริง แต่ตอนนี้คุณสามารถทำสิ่งต่อไปนี้ซึ่งส่งผลให้ต่อไปนี้:scales::comma_format(digits = 12)(1000000.789) "1,000,000.789"
steveb

2
เครื่องชั่ง :: จุลภาค (1000000) ดูเหมือนจะคุ้มค่าที่จะกล่าวถึง
โจ

4

ฉันคิดว่าความคิดเห็นของ Joe ต่อ MatthewR เป็นคำตอบที่ดีที่สุดและควรเน้น:

ณ เดือนกันยายน 2018 scalesแพคเกจ (บางส่วนTidyverse) ทำสิ่งนี้:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

scalesแพคเกจที่ดูเหมือนจะเล่นอย่างมากกับggplot2การอนุญาตให้การควบคุมที่ดีของวิธีการ numerics จะแสดงในแปลงและแผนภูมิ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.