删除所有前导零并将数字转为正数

时间:2016-06-17 21:59:04

标签: r

我试图将.000278转换为R中的278但我看到的所有功能只能将其移动到.278。它需要是一个完整的正数。

是否有一个函数可以删除数字前面的.0+

4 个答案:

答案 0 :(得分: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计算字符数这些数字(&#34; 0。&#34;减去2)。

另一种方法。使用包stringr

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

请注意,使用此方法,您需要使用str_replaceas.numeric的输出转换回数字(不理想)。

答案 1 :(得分: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

答案 2 :(得分: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 :(得分:0)

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