【问题标题】:R: Displaying numbers as currency in knitr::kableR:在 knitr::kable 中将数字显示为货币
【发布时间】:2017-12-05 22:57:59
【问题描述】:

我使用 knitr::kable 创建了下表

Week Cost   Disc    total
Wk1 10000   -4000   6000
Wk2 20000   -3000   17000
Wk3 30000   -2000   28000
Wk4 40000   -1000   39000

我想使用带有货币的会计格式来显示数字。我知道您可以使用粘贴功能,但我想知道是否有更清洁的解决方案。这是我希望它的外观:

Week Cost      Disc     total
Wk1 $10,000  ($4,000)  $6,000
Wk2 $20,000  ($3,000)  $17,000
Wk3 $30,000  ($2,000)  $28,000
Wk4 $40,000  ($1,000)  $39,000

有什么建议吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    formattable 库中使用currency

    ##Your sample df
    
    df <- data.frame(Week = c("Wk1", "Wk2", "Wk3", "Wk4"), Cost = c(10000, 20000, 30000, 40000))
    
    
    library(formattable)
    df$Cost <- currency(df$Cost, digits = 0L)
    df
    #  Week    Cost
    #1  Wk1 $10,000
    #2  Wk2 $20,000
    #3  Wk3 $30,000
    #4  Wk4 $40,000
    

    【讨论】:

    • Disc 列的结果与 OP 的预期输出不匹配
    【解决方案2】:

    我们可以使用 scales 包中的 dollar 函数来编写一个名为 format_dol_fun 的辅助函数来执行这种格式化:

    format_dol_fun <- function(x){
      ifelse(x < 0, 
             paste0('(', scales::dollar(-x), ')'), 
             scales::dollar(x))
      }
    
    dplyr::mutate_if(dat, is.numeric, format_dol_fun)
    
    #   Week    Cost     Disc   total
    # 1  Wk1 $10,000 ($4,000)  $6,000
    # 2  Wk2 $20,000 ($3,000) $17,000
    # 3  Wk3 $30,000 ($2,000) $28,000
    # 4  Wk4 $40,000 ($1,000) $39,000
    

    数据

    dat <- structure(list(Week = c("Wk1", "Wk2", "Wk3", "Wk4"), 
                          Cost = c(10000L, 20000L, 30000L, 40000L), 
                          Disc = c(-4000L, -3000L, -2000L, -1000L), 
                          total = c(6000L, 17000L, 28000L, 39000L)), 
                     .Names = c("Week", "Cost", "Disc", "total"), 
                     class = "data.frame", 
                     row.names = c(NA, -4L))
    

    【讨论】:

    • scales 现在有一个dollar 函数的parens 参数,所以你可以这样做:dplyr::mutate_if(dat, is.numeric, ~scales::dollar(., negative_parens = TRUE))
    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2020-05-13
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多