亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將數字格式化為R中的百分比?

如何將數字格式化為R中的百分比?

holdtom 2019-12-20 09:53:26
令我困惑的R之一是如何格式化數字以百分比形式打印。例如,顯示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但無法控制舍入精度。
查看完整描述

3 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

幾年后的更新:


這些天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"。)


查看完整回答
反對 回復 2019-12-20
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

簽出scales包裝。ggplot2我認為它曾經是的一部分。


library('scales')

percent((1:10) / 100)

#  [1] "1%"  "2%"  "3%"  "4%"  "5%"  "6%"  "7%"  "8%"  "9%"  "10%"

在大多數情況下,用于檢測精度的內置邏輯應該可以很好地工作。


percent((1:10) / 1000)

#  [1] "0.1%" "0.2%" "0.3%" "0.4%" "0.5%" "0.6%" "0.7%" "0.8%" "0.9%" "1.0%"

percent((1:10) / 100000)

#  [1] "0.001%" "0.002%" "0.003%" "0.004%" "0.005%" "0.006%" "0.007%" "0.008%"

#  [9] "0.009%" "0.010%"

percent(sqrt(seq(0, 1, by=0.1)))

#  [1] "0%"   "32%"  "45%"  "55%"  "63%"  "71%"  "77%"  "84%"  "89%"  "95%" 

# [11] "100%"

percent(seq(0, 0.1, by=0.01) ** 2)

#  [1] "0.00%" "0.01%" "0.04%" "0.09%" "0.16%" "0.25%" "0.36%" "0.49%" "0.64%"

# [10] "0.81%" "1.00%"


查看完整回答
反對 回復 2019-12-20
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

我做了一些基準測試對這些問題的答案的速度和驚訝地看到percent在scales如此吹捧包裝,鑒于其疲弱。我想它的優勢是它的自動檢測器可以正確格式化,但是如果您知道數據看起來像什么,那么顯然可以避免。


以下是嘗試將(0,1)中的100,000個百分比的列表格式設置為2位數字的百分比的結果:


library(microbenchmark)

x = runif(1e5)

microbenchmark(times = 100L, andrie1(), andrie2(), richie(), krlmlr())

# Unit: milliseconds

#   expr       min        lq      mean    median        uq       max

# 1 andrie1()  91.08811  95.51952  99.54368  97.39548 102.75665 126.54918 #paste(round())

# 2 andrie2()  43.75678  45.56284  49.20919  47.42042  51.23483  69.10444 #sprintf()

# 3  richie()  79.35606  82.30379  87.29905  84.47743  90.38425 112.22889 #paste(formatC())

# 4  krlmlr() 243.19699 267.74435 304.16202 280.28878 311.41978 534.55904 #scales::percent()

因此sprintf,當我們要添加百分號時,它將成為明顯的贏家。另一方面,如果我們只想將數字乘以四舍五入(從比例乘以百分比而沒有“%”,則round()最快):


# Unit: milliseconds

#        expr      min        lq      mean    median        uq       max

# 1 andrie1()  4.43576  4.514349  4.583014  4.547911  4.640199  4.939159 # round()

# 2 andrie2() 42.26545 42.462963 43.229595 42.960719 43.642912 47.344517 # sprintf()

# 3  richie() 64.99420 65.872592 67.480730 66.731730 67.950658 96.722691 # formatC()


查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 3554 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號