У меня есть фрейм данных, хранящий сумму в долларах, это выглядит как
> a
cost
1 1e+05
2 2e+05
Мне бы хотелось, чтобы это можно было показать как
> a
cost
1 $100,000
2 $200,000
Как это сделать в R?
У меня есть фрейм данных, хранящий сумму в долларах, это выглядит как
> a
cost
1 1e+05
2 2e+05
Мне бы хотелось, чтобы это можно было показать как
> a
cost
1 $100,000
2 $200,000
Как это сделать в R?
DF <- data.frame(cost=c(1e4, 2e5))
#assign a class
class(DF$cost) <- c("money", class(DF$cost))
#S3 print method for the class
print.money <- function(x, ...) {
print.default(paste0("$", formatC(as.numeric(x), format="f", digits=2, big.mark=",")))
}
#format method, which is necessary for formating in a data.frame
format.money <- function(x, ...) {
paste0("$", formatC(as.numeric(x), format="f", digits=2, big.mark=","))
}
DF
# cost
#1 $10,000.00
#2 $200,000.00
Это даст вам все, кроме запятых:
> sprintf("$%.2f", seq(100,100000,by=10000)/7)
[1] "$14.29" "$1442.86" "$2871.43" "$4300.00" "$5728.57" "$7157.14" "$8585.71" "$10014.29" "$11442.86" "$12871.43"
Получение этих функций довольно сложно, как показано в этих вопросах:
К счастью, это реализовано в пакете весов:
library('scales')
> dollar_format()(c(100, 0.23, 1.456565, 2e3))
## [1] "$100.00" "$0.23" "$1.46" "$2,000.00"
> dollar_format()(c(1:10 * 10))
## [1] "$10" "$20" "$30" "$40" "$50" "$60" "$70" "$80" "$90" "$100"
> dollar(c(100, 0.23, 1.456565, 2e3))
## [1] "$100.00" "$0.23" "$1.46" "$2,000.00"
> dollar(c(1:10 * 10))
## [1] "$10" "$20" "$30" "$40" "$50" "$60" "$70" "$80" "$90" "$100"
> dollar(10^(1:8))
## [1] "$10" "$100" "$1,000" "$10,000" "$100,000" "$1,000,000" "$10,000,000" "$100,000,000"
Вы можете использовать функцию currency()
из пакета formattable
. Пример OP
a <- data.frame(cost = c(1e+05, 2e+05))
a
cost 1 1e+05 2 2e+05
library(formattable)
a$cost <- currency(a$cost, digits = 0L)
a
cost 1 $100,000 2 $200,000
По умолчанию отображаются две цифры после десятичной точки. Это было отменено с использованием параметра digits
для удовлетворения ожиданий OP.
Признак formattable
заключается в том, что числа по-прежнему являются числами даже с прикрепленным форматом, например,
a$cost2 <- 2 * a$cost
a
cost cost2 1 $100,000 $200,000 2 $200,000 $400,000