在dplyr中将数字格式化为货币形式?

3

我想在dplyr动词中将报价金额格式化为货币格式,不包括分数。四舍五入到最接近的一美元。以下是我目前的代码及其输出。如何使报价金额从数字(1000.5)变为$1001?

$ ADD_PROD_DESC          <chr> NA, NA, "Copper White 147-1472G", "Copper White 147-1472G", "Copper White 147-1472G", "Copper White 147-1472G", "Copper White 147-1472G", "Copper White~
$ Manufacturer_Model_NBR <chr> NA, "1404N42-00", "147-1472G", "147-1472G", "147-1472G", "147-1472G", "147-1472G", "147-1472G", "147-1472G", "147-1672G", "147-1672G", "147-1672G", "14~
$ Call_For_Price         <chr> "FALSE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "FALSE", "TRUE", "TRUE~
$ Quote_Dollars          <dbl> 1784781.3, 1008000.0, 746010.0, 703822.5, 703822.5, 703822.5, 703822.5, 646818.5, 646818.5, 613302.3, 560757.6, 560757.6, 560757.6, 560757.6, 519990.0,~

与Excel不同,在这种情况下,您需要将数字转换为字符串。使用paste0stringr::str_c(),例如paste0('$', round(Quote_Dollars,0)) - AnilGoyal
如何使用dplyr动词进行翻译? - Jaskeil
2个回答

5
您可以使用包scales
Quote_Dollars <- scales::dollar_format()(data$Quote_Dollars)

dollar_format默认情况下是四舍五入到最接近的数字。


如果我在dplyr中做这个,我需要在mutate函数中进行吗? - Jaskeil
你需要这样做: data <- data %>% mutate(Quote_Dollars = dollard_format()(data$Quote_Dollars)) - MonJeanJean
1
@MonJeanJean 是否应该是 dollar_format 而不是 dollard_format - jpdugo17
@jpdugo17 你说得对,谢谢。我会进行编辑的。 - MonJeanJean

4
您可以在 dplyr 管道中进行如下操作。但是,请注意,您必须在管道的最后执行此操作,因为它/它们将把 numeric 转换为 string,这样您就无法对其进行进一步计算。
set.seed(123)
Quote_Dollars <- sample(7000:20000, 5)/7
df <- data.frame(col1 = LETTERS[1:5],
                 col2 = letters[6:10],
                 Quote_Dollars = Quote_Dollars)
df
#>   col1 col2 Quote_Dollars
#> 1    A    f      1351.714
#> 2    B    g      1358.571
#> 3    C    h      2488.286
#> 4    D    i      2245.286
#> 5    E    j      2783.143
library(dplyr, warn.conflicts = F)
df %>% mutate(Quote_Dollars = paste0('$', round(Quote_Dollars,0)))
#>   col1 col2 Quote_Dollars
#> 1    A    f         $1352
#> 2    B    g         $1359
#> 3    C    h         $2488
#> 4    D    i         $2245
#> 5    E    j         $2783

正如MonJeanJean所建议的那样,这应该也可以工作。

df %>% mutate(Quote_Dollars = scales::dollar(Quote_Dollars, largest_with_cents = 0))
  col1 col2 Quote_Dollars
1    A    f        $1,352
2    B    g        $1,359
3    C    h        $2,488
4    D    i        $2,245
5    E    j        $2,783

我已经修改了我的问题,如何在我的dplyr语句中进行修改? - Jaskeil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接