从R中的数字中提取第一个非零数字
Extracting the 1st non-zero digit from a numeric in R
有没有办法提取 R 中数值的第一个非零数字?
示例输入:
123.01, 0.56, 0.078, 0.0092
输出:
1, 5, 7, 9
这适用于正输入:
firstdigit <- function(x){ floor(x / 10 ^ floor(log10(x))) }
firstdigit(c(123.01, 0.56, 0.078, 0.0092))
# 1 5 7 9
您可以使用正则表达式来提取。使用 stringr
包:
set.seed(1)
x <- c(123.01, 0.56, 0.078, 0.0092)
x
#> [1] 123.0100 0.5600 0.0780 0.0092
stringr::str_extract(as.character(x), "([1-9]{1})")
#> [1] "1" "5" "7" "9"
您可以根据需要转换回数字。
您可以使用基数 R:
中的 sub()
x <- c("123.01", "0.56", "0.078", "0.0092", "-1.2", "-0.3", "-0.04", "100")
sub("[^1-9]*(.).*", "\1", x)
或 gsub()
y <- gsub("[^1-9]", "", x)
substr(y, 1,1)
这最后一个你可以修改以找到第二个数字:
y <- gsub("[^1-9]", "", x)
substr(y, 2,2)
来自评论:
对于这种情况,问题的措辞需要有所不同。
“提取前导零后的第二个数字”或“提取第二个有效数字”。
y <- sub("^[^1-9]*", "", x)
y <- gsub("\.", "", y)
substr(y, 2,2)
我们可以使用 gsub
删除前导 0,trimws
删除点和 0 个或多个零,然后使用 substr
.
提取第一个字符
x <- c(123.01, 0.56, 0.078, 0.0092)
substr(trimws(gsub('^0', '', x), "left", "\.0*"), 1, 1)
#[1] "1" "5" "7" "9"
有没有办法提取 R 中数值的第一个非零数字?
示例输入:
123.01, 0.56, 0.078, 0.0092
输出:
1, 5, 7, 9
这适用于正输入:
firstdigit <- function(x){ floor(x / 10 ^ floor(log10(x))) }
firstdigit(c(123.01, 0.56, 0.078, 0.0092))
# 1 5 7 9
您可以使用正则表达式来提取。使用 stringr
包:
set.seed(1)
x <- c(123.01, 0.56, 0.078, 0.0092)
x
#> [1] 123.0100 0.5600 0.0780 0.0092
stringr::str_extract(as.character(x), "([1-9]{1})")
#> [1] "1" "5" "7" "9"
您可以根据需要转换回数字。
您可以使用基数 R:
中的sub()
x <- c("123.01", "0.56", "0.078", "0.0092", "-1.2", "-0.3", "-0.04", "100")
sub("[^1-9]*(.).*", "\1", x)
或 gsub()
y <- gsub("[^1-9]", "", x)
substr(y, 1,1)
这最后一个你可以修改以找到第二个数字:
y <- gsub("[^1-9]", "", x)
substr(y, 2,2)
来自评论:
对于这种情况,问题的措辞需要有所不同。
“提取前导零后的第二个数字”或“提取第二个有效数字”。
y <- sub("^[^1-9]*", "", x)
y <- gsub("\.", "", y)
substr(y, 2,2)
我们可以使用 gsub
删除前导 0,trimws
删除点和 0 个或多个零,然后使用 substr
.
x <- c(123.01, 0.56, 0.078, 0.0092)
substr(trimws(gsub('^0', '', x), "left", "\.0*"), 1, 1)
#[1] "1" "5" "7" "9"