【问题标题】:Matching the first digits in R匹配R中的第一个数字
【发布时间】:2016-01-06 15:46:27
【问题描述】:

任何人都知道匹配和分类 R 中数字的前 n 位数字的好方法吗?

例如,

123451
123452
123461
123462

在这种情况下,如果我们匹配前 n=1-4 个数字,我们将得到所有相同的组。如果我们匹配 n=5 个数字,我们将得到 2 个组。

我想通过将数字向量作为字符向量来实现这一点,将其拆分,以便每个数字都是一个元素,然后可以将其截断为 n 位,并根据这些数字进行匹配;但是,我有很多数字,似乎必须有更好的方法来仅对 R 中数字的前 n 位进行排序。有什么想法吗?

谢谢!

【问题讨论】:

  • 您可以使用?substring。你期望结果是什么?我不确定您要匹配什么。您可能对lapply(c(4, 5), substr, x = x, start = 1) 感兴趣,其中x 是原始向量。
  • 啊!好主意@RichardScriven 谢谢!

标签: regex r sorting


【解决方案1】:

这是一个不涉及转换为字符的矢量化解决方案:

nums <- c(123451,
          123452,
          123461,
          123462)

firstDigits <- function(x, n) {
    ndigits <- floor(log10(x)) + 1
    floor(x / 10^(ndigits - n))
}

factor(firstDigits(nums, 4))
## [1] 1234 1234 1234 1234
## Levels: 1234
factor(firstDigits(nums, 5))
## [1] 12345 12345 12346 12346
## Levels: 12345 12346
factor(firstDigits(nums, 6))
## [1] 123451 123452 123461 123462
## Levels: 123451 123452 123461 123462

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多