在 dplyr 中将数字格式化为货币?
Format number to currency in dplyr?
我希望将 Quote dollars 数字格式化为 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,~
您可以使用包 scales
:
Quote_Dollars <- scales::dollard_format()(data$Quote_Dollars)
dollard_format
默认四舍五入到最接近的值。
您可以在 dplyr
管道中这样做。 但是你必须小心地在你的最后一个管道中这样做,因为 it/these 会将 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 52
#> 2 B g 59
#> 3 C h 88
#> 4 D i 45
#> 5 E j 83
正如 MonJeanJean 所建议的,这也应该有效。
df %>% mutate(Quote_Dollars = scales::dollar(Quote_Dollars, largest_with_cents = 0))
col1 col2 Quote_Dollars
1 A f ,352
2 B g ,359
3 C h ,488
4 D i ,245
5 E j ,783
我希望将 Quote dollars 数字格式化为 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,~
您可以使用包 scales
:
Quote_Dollars <- scales::dollard_format()(data$Quote_Dollars)
dollard_format
默认四舍五入到最接近的值。
您可以在 dplyr
管道中这样做。 但是你必须小心地在你的最后一个管道中这样做,因为 it/these 会将 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 52
#> 2 B g 59
#> 3 C h 88
#> 4 D i 45
#> 5 E j 83
正如 MonJeanJean 所建议的,这也应该有效。
df %>% mutate(Quote_Dollars = scales::dollar(Quote_Dollars, largest_with_cents = 0))
col1 col2 Quote_Dollars
1 A f ,352
2 B g ,359
3 C h ,488
4 D i ,245
5 E j ,783