2015-10-08 57 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