【发布时间】:2021-02-04 09:30:51
【问题描述】:
我想获取 R 语言中数字的第一个数字(即左边的数字)。我该怎么做?
532648 → 5
874 → 8
3897 → 3
【问题讨论】:
标签: r
我想获取 R 语言中数字的第一个数字(即左边的数字)。我该怎么做?
532648 → 5
874 → 8
3897 → 3
【问题讨论】:
标签: r
您正在查看的数字是十进制的,即以 10 为底。要获得此类数字的 幅度(即以 10 为底的位数),请使用 log10功能:
x = c(532648, 874, 3897)
floor(log10(x))
# [1] 5 2 3
现在您可以使用幅度来获取最重要的数字:
as.integer(x / 10 ^ floor(log10(x)))
# [1] 5 8 3
请注意,如果输入为 0,这将失败,因为 log(0) 未定义(或 -∞)。
要针对非正数(0 或负数)输入验证代码,请使用以下代码:
most_significant_digit = function (x) {
magnitude = floor(log10(abs(x)))
as.integer(x / 10 ^ ifelse(is.infinite(magnitude), 1, magnitude))
}
【讨论】:
我们可以使用substr
as.integer(substr(v1, 1, 1))
#[1] 5 8 3
v1 <- c(532648, 874, 3897)
【讨论】:
floor(log10(x)) 的另一个答案返回 NaN