【问题标题】:Extract first digit from each element of a numeric vector in R从R中数值向量的每个元素中提取第一个数字
【发布时间】:2020-06-24 18:46:54
【问题描述】:

有点像here,我想从数字向量的每个元素中提取第一个数字,而不是把它变成一个字符向量并返回。

d <- c(123, 2, 45)

预期输出:

[1] 1 2 4

我用floor() 尝试了不同的东西,但没有得到想要的结果。

【问题讨论】:

  • as.numeric(substr(d, 1, 1)) ... 好的,不需要的强制是隐式完成的。不使用字符:d %/% 10^as.integer(log10(d))

标签: r


【解决方案1】:

这里的一种数值方法是将每个输入数字除以 10,以底为 10 为底。这意味着,例如,我们将输入 123 除以 100,得到 1.23 .然后,我们取其下限,得到第一个数字1

getFirstDigit <- function(x) {
    floor(x / (10 ^ floor(log10(x))))
}

d <- c(123, 2, 45)
getFirstDigit(d)

[1] 1 2 4

更暴力的做法是将输入向量转换为字符,获取第一个字符,然后再转换回数字。但是,我怀疑这样做会比我上面的表现更好。

【讨论】:

  • @jogo 你知道吗,你是对的:-) ...顺便说一句,我已经看到这个问题在这个网站上以许多不同的语言出现,最近是在 Python 中。跨度>
猜你喜欢
  • 1970-01-01
  • 2014-11-11
  • 2011-07-11
  • 1970-01-01
  • 2013-12-12
  • 2013-02-08
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多