1. ホーム
  2. r

[解決済み] Rで数値をパーセントで表示するには?

2022-04-23 16:07:22

質問

Rの初心者で戸惑ったことの1つは、印刷用に数値をパーセントでフォーマットする方法です。

例えば、以下のように表示します。 0.12345 として 12.345% . これに対する回避策はいくつかありますが、どれも"newby friendly"とは言えないようです。 例えば

set.seed(1)
m <- runif(5)

paste(round(100*m, 2), "%", sep="")
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"

sprintf("%1.2f%%", 100*m)
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"

質問です。 これを実現するためのRの基本的な関数はありますか? または、便利なラッパーを提供する広く使われているパッケージはありますか?


で探したにもかかわらず、このような ?format , ?formatC?prettyNum しかし、私はまだベースRで適切な便利なラッパーを見つけられずにいます。 ??"percent" は有用なものを得られなかった。 library(sos); findFn("format percent") は1250件のヒットを返すが、これも役に立たない。 ggplot2 は、関数 percent が、これでは丸め精度をコントロールできない。

どのように解決するのですか?

もっと後でもいい。

@DzimitryMさんのご指摘の通りです。 percent() は引退し、代わりに label_percent() の同義語である percent_format() 関数を使用します。

label_percent() は関数を返すので、これを使うにはさらに一組の括弧が必要です。

library(scales)
x <- c(-1, 0, 0.1, 0.555555, 1, 100)
label_percent()(x)
## [1] "-100%"   "0%"      "10%"     "56%"     "100%"    "10 000%"

最初の括弧の中に引数を追加して、カスタマイズしてください。

label_percent(big.mark = ",", suffix = " percent")(x)
## [1] "-100 percent"   "0 percent"      "10 percent"    
## [4] "56 percent"     "100 percent"    "10,000 percent"


数年後のアップデート。

最近では percent の関数は scales パッケージで、krlmlrの回答で説明されています。 私の手による解決策の代わりに、それを使ってください。


次のようなことを試してみてください。

percent <- function(x, digits = 2, format = "f", ...) {
  paste0(formatC(100 * x, format = format, digits = digits, ...), "%")
}

使い方で、例えば

x <- c(-1, 0, 0.1, 0.555555, 1, 100)
percent(x)

(お好みで、書式を "f" から "g" .)