【问题标题】:add commas into number for output将逗号添加到数字中以进行输出
【发布时间】:2009-10-17 02:24:16
【问题描述】:

我正在通过xtable 将数据帧输出到 html。我想在表格的几列中为数字添加逗号。在我自己进行粘贴破解之前,我想我会检查是否有内置的方法来做到这一点。

【问题讨论】:

    标签: r xtable


    【解决方案1】:

    您可能需要考虑使用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"
    

    【讨论】:

    • 你知道如何格式化整个文档吗?
    【解决方案2】:

    非常感谢 Jonathan Chang 的回答。 formatC 看起来是一个非常有用的功能。这激发了我阅读它的文档,其中我找到了prettyNum,结果证明这是我遇到的类似问题的一个非常优雅的解决方案。这是我在名为enrollment.summary 的数据框中为数字添加逗号的最小可行示例。

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

    【讨论】:

    • formatCfunction 包中的function,而不是包本身。将来,请包括可重复的示例并在您的答案中显示行为。例如,考虑将enrollment.summary 替换为mtcarsprettyNum(mtcars, big.mark=",") 返回一个字符矩阵,其中列对应于mtcars data.frame 中的列,并打印数字。
    • 还要注意prettyNum 用(可能不需要的)空格填充您的输出:prettyNum(c(123,1234),big.mark=",");给出“123”“1,234”。添加 preserve.width="none" 以防止这种情况发生。
    【解决方案3】:

    您也可以尝试使用函数参数“format.args”

      ## Demonstration of additional formatC() arguments.
      print(fm1.table, format.args = list(big.mark = "'", decimal.mark = ","))
    

    从这里

    https://cran.rstudio.com/web/packages/xtable/xtable.pdf

    【讨论】:

    • 这非常有用,因为它允许用户保持列的原始格式。
    【解决方案4】:

    这是一个迟到的答案,但您也可以使用scales::comma_format,如下所示:

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

    对于整数值,您可以只使用逗号:

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

    【讨论】:

    • 对我来说出错的一件事是它将它转换为字符串
    • @SovikGupta 是的,它会的。您只想在显示时添加逗号。如果您在 data.frame 中有数据,您可能会将其保留为数字。您在什么情况下会导致问题?
    • @SovikGupta 使用dplyr 的示例可以添加列的字符串版本,如dplyr::tibble(A = c(1:5) * 1e6) %&gt;% dplyr::mutate(A.as.String = scales::comma(A)) 或仅作为字符串输出,而无需修改数据框,如dplyr::tibble(A = c(1:5) * 1e6) %&gt;% dplyr::mutate(A = scales::comma(A)) 跨度>
    【解决方案5】:

    要格式化来自dplyr 的一些摘要,这里是样板代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多