Формат номера в валюту в dplyr?

#r #dplyr #formattable

Вопрос:

Я хочу отформатировать номер котировки в долларах в формат валюты в глаголах 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,~
 

Комментарии:

1. В отличие от excel, в этом случае вам нужно преобразовать числовое значение в строку. Использовать paste0 или stringr::str_c() нравится paste0('$', round(Quote_Dollars,0))

2. как бы я сделал это с глаголами dplyr

Ответ №1:

Вы можете использовать пакет scales :

 Quote_Dollars <- scales::dollard_format()(data$Quote_Dollars)
 

dollard_format по умолчанию округляется до ближайшего.

Комментарии:

1. если бы я сделал это в dplyr, должен ли я был бы сделать это в глаголе мутировать?

2. Вам придется это сделать: data <- data %>% mutate(Quote_Dollars = dollard_format()(data$Quote_Dollars))

3. Не могли бы вы указать ошибку, пожалуйста? Потому что это работает на меня

Ответ №2:

Вы можете делать так в 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('



Как предположил Монджанжан, это также должно сработать.
 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
 

Комментарии:

1. Я пересмотрел свой вопрос, как бы я сделал это в своем заявлении dplyr?

, 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


Как предположил Монджанжан, это также должно сработать.


Комментарии:

1. Я пересмотрел свой вопрос, как бы я сделал это в своем заявлении dplyr?