【问题标题】:Comma separator for numbers in R?R中数字的逗号分隔符?
【发布时间】:2011-04-19 19:42:35
【问题描述】:

R 中有一个函数可以显示用逗号分隔的大数字吗?

即,从10000001,000,000

【问题讨论】:

  • Excel 中简单而 R 中复杂得离谱的经典案例

标签: r


【解决方案1】:

?format:

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

【讨论】:

  • 格式也保留小数点:format(round(mean(c), 2), big.mark=",", scientific=FALSE)
【解决方案2】:

您可以尝试 format 或 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=TRUEformatpreserve.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"

【讨论】:

  • 请注意,这些具有用空格填充打印字符串的副作用,例如:prettyNum(c(123,1234),big.mark=",");给" 123" "1,234"。将trim=T 添加到format 或将preserve.width="none" 添加到prettyNum 以防止这种情况发生。
  • @MichaelChirico 感谢您提供额外信息。我已将其添加到答案中。
  • 请注意,如果您还设置小数位数,如果您有一个向量,如果数字完全不同,这可能会出错。从帮助“数字向量被编码为显示所有元素所需的最小小数位数至少为有效数字位数。但是,如果所有元素都有尾随零,则小数位数减少直到 nsmall”
  • 所以format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE) 给出了 ` "12,345,678.0000" "0.0012" ,所以可以看到足够多的内容。即,场所格式不是逐个元素完成的。抓住了我,所以想分享这个。
  • 花了很长时间试图找到隐藏在format 的参数大海捞针中的scientific。谢谢!
【解决方案3】:

发布的其他答案显然有效 - 但我一直使用

library(scales)    
label_comma()(1000000)

【讨论】:

  • 函数comma_format只能处理整数。
  • 这是一个非常晚的响应,过去comma_format 不处理实数可能是正确的,但现在您可以执行以下操作:scales::comma_format(digits = 12)(1000000.789) 导致以下结果:"1,000,000.789".
  • scales::comma(1000000) 似乎值得一提。
【解决方案4】:

我认为乔对 MatthewR 的评论提供了最好的答案,应该强调一下:

截至 2018 年 9 月,scales 包(Tidyverse 的一部分)正是这样做的:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

scales 包似乎与ggplot2 配合得非常好,可以很好地控制数字在绘图和图表中的显示方式。

【讨论】:

  • 我对此表示赞同,但是当我查看comma() 时,我发现它已被淘汰,取而代之的是label_comma,它返回一个函数而不是一个字符串。我会回到首选prettyNum,即使big.mark="," 不是默认参数,所以我仍然需要每次显式传递它。
  • @Dannid 你试过下面的功能吗? scales::label_comma()(1000000)我相信它工作正常。
猜你喜欢
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多