2016-06-17 54 views

回答

1

嘗試此(len可調):

a <- 0.000278 
a*(10^match(T,round(a, 1:(len=10)) == a)) # counts the number of decimals places 
# 278 

使用as.numeric(a)萬一a是字符類型。

3

我假設你想要一次應用到很多數字(否則我可能不會理解這個問題)。

a <- c(0.003, 0.0056, 0.000278)#Example data 
a*(10^(nchar(a)-2)) 
[1] 3 56 278 

確保科學記數法與scipen禁用,因爲在this後(如討論,通過做options(scipen=999),這很重要,因爲字符數有nchar數量進行計數(減去2「0」) 。

另一種方法,使用包stringr

a <- c(0.003, 0.0056, 0.000278)#Example data 
library(stringr) 
as.numeric(str_replace(a, "0.", "")) 
[1] 3 56 278 

注意,用這種方法,你需要的輸出轉換回到數字使用as.numeric(不理想)。

+1

我認爲'a *(10 ^(nchar(a)-2))'是最好的方法。你總是想避免不必要的強制。 –

+0

感謝您的評論,我改變了順序。 – milan

+0

@RichardScriven'nchar'方法對'a < - c(0.00003,0.0056,0.0000278)' – 989

2

或者使用

substrregexpr什麼讓你想要什麼

x <- 0.000278 
as.numeric(substr(x ,regexpr("[^0.]",x),nchar(x))) 
[1] 278 

,這也適用於不同的號碼,只需設置:

options("scipen"=100, "digits"=10) # Force R not to use exponential notation (e.g. e-8)

,你可以嘗試例如:

z <- 0.000000588 
as.numeric(substr(z ,regexpr("[^0.]",z),nchar(z))) 
[1] 588 
+0

@Richard Scriven好點,不幸的是我犯了一個我糾正的錯誤(請參閱我的文章編輯)。 – Miha

+0

您的解決方案嚴重依賴'選項(「scipen」= 100,「digits」= 10)'。應該更改R默認選項以使用它。 – 989

0
> as.numeric(gsub("^[0.]*", "", paste(0.000278))) 
[1] 278 
相關問題