2015-10-08 58 views
1

任何人都知道一个很好的方法来匹配和分类R中数字的前n个数字?匹配R中的第一个数字

例如,

123451 
123452 
123461 
123462 

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

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

谢谢!

+2

您可以使用一个'substring'?你期望什么结果呢?我不确定你想要匹配什么。你可能对'lapply(c(4,5),substr,x = x,start = 1)'感兴趣,其中'x'是原始向量。 –

+0

啊!好主意@RichardScriven谢谢! – dc3

回答

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