#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?