匹配R中的第一个数字

时间:2015-10-08 20:45:31

标签: regex r sorting

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

例如,

123451
123452
123461
123462

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

我想通过使数字向量成为一个字符向量来进行此操作,将其拆分,以便每个数字都可以被截断为n个数字,并根据这些数字进行匹配;但是,我有很多数字,似乎必须有一个更好的方法来排序R中数字的前n位数。任何想法?

谢谢!

1 个答案:

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