2012-10-09 9 views
6

In R Ho un certo numero, diciamo 1293828893, chiamato x.Divisione di un numero in R

desidero dividere questo numero in modo da eliminare le centrali 4 cifre 3828 e tornare li, pseudocodice è la seguente:

splitnum <- function(number){ 
    #check number is 10 digits 
    if(nchar(number) != 10){ 
      stop("number not of right size"); 
    } 
    middlebits <- middle 4 digits of number 
    return(middlebits); 
} 

Questa è una bella domanda semplice, ma le uniche soluzioni che ho trovato si applica ai stringhe di caratteri, piuttosto che numeriche.

Se di interesse, sto cercando di creare un'implementazione in R del Middle-square method, ma questo passaggio è particolarmente complicato.

risposta

8

Basta usare divisione intera:

> x <- 1293828893 
> (x %/% 1e3) %% 1e4 
[1] 3828 
6

Ecco una funzione che evita completamente convertire il numero a un personaggio

splitnum <- function(number){ 
    #check number is 10 digits 
    if(trunc(log10(X))!=9) { 
      stop("number not of right size") 
    } 
    (number %/% 1e3) %% 1e4 
} 

splitnum(1293828893) 
# [1] 3828 
9

È possibile utilizzare substr(). Vedi la sua pagina di aiuto ?substr. Nella funzione che vorrei fare:

splitnum <- function(number){ 
    #check number is 10 digits 
    stopifnot(nchar(number) == 10) 
    as.numeric(substr(number, start = 4, stop = 7)) 
} 

che dà:

> splitnum(1293828893) 
[1] 3828 

Rimuovere il as.numeric(....) avvolgimento sull'ultima linea che si desidera le cifre come una stringa.

Problemi correlati