2012-10-09 16 views
6

En R Tengo un número, digamos 1293828893, llamado x.Dividir un número en R

deseo de dividir este número a fin de eliminar las medias 4 dígitos 3828 y devolverlos, pseudocódigo es el siguiente:

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); 
} 

Ésta es una pregunta bastante simple, pero las únicas soluciones que he encontrado aplica a cadenas de caracteres, en lugar de cadenas numéricas.

Si es de interés, estoy intentando crear una implementación en R del Middle-square method, pero este paso es particularmente complicado.

Respuesta

8

sólo tiene que utilizar la división entera:

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

Aquí es una función que evita por completo convertir el número a un personaje

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

Puede utilizar substr(). Vea su página de ayuda ?substr. En su función de Haría:

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

lo que da:

> splitnum(1293828893) 
[1] 3828 

sacar la funda de as.numeric(....) en la última línea que desea los dígitos como una cadena.

Cuestiones relacionadas