2012-11-12 170 views
1

格式化數字的最佳方式是什麼,以便它不顯示前導零。例如:不帶前導零的格式數字

test = .006 
sprintf/format/formatC(???) # should result in ".006" 
+0

我發現[這個答案](http://stackoverflow.com/questions/12643391/how-to-remove-leading-0-in-a-numeric-r-variable)到一個相關的問題有用。它使用base R,並且不會丟棄非零的前導數字。 –

回答

0

您可以隨時與自己的正則表達式修復它搜索 - 並取代:

library(stringr) 
test = .006 
str_replace(as.character(test), "^0\\.", ".") 

不是最優雅的答案,但它的工作原理。用您喜歡的浮點格式替換as.character所需的任何字符串轉換,例如sprintf

+0

很好的解決方案!總結得很好 – SFun28

+5

你可以使用'sub'而不是'stringr'。 – flodel

+5

stringr對某些東西來說很好,但是我發現它在基本函數工作的時候經常使用... – Dason

5

我相信我回答過這一次,但無法找到它。您無法告訴sprintf()等有關丟棄前導零的格式......所以你要自己做,例如通過substring()

R> val <- 0.006 
R> aa <- substring(sprintf("%4.3f", val), 2) 
R> aa 
[1] ".006" 
R> 
+0

謝謝德克!好答案。接受瑞恩的,因爲它泛化爲任意數量的有效數字 – SFun28

+1

所以,只要做'substring(as.character(val),2)'這不需要任何東西,但基地R,並可能「更快」(而不是重要)比一個正則表達式解決方案。 –

+1

當小數點左邊有數字時不起作用,例如2.22 – SFun28

1
f <- function(x) gsub("^(\\s*[+|-]?)0\\.", "\\1.", as.character(x)) 
f(0.006) 
# ".006" 
f(-0.006) 
# "-.006" 
f("+0.006") 
# "+.006" 
f(" 0.006") 
# " .006" 
f(10.05) 
# "10.05" 
+1

這應該是答案,因爲它處理主要用例並使用base r。 –

相關問題