2012-10-09 6 views
6

R1293828893といい、xといいます。番号を分割するR

私は次のように擬似コードは、中央の4桁3828を削除し、それらを返すようにこの番号を分割したい:

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

は、これはかなり簡単な質問ですが、私が見つけた唯一の解決策は、に適用されます数字の文字列ではなく文字列です。

Rの実装をMiddle-square methodに作成しようとしていますが、この手順は特に難しいです。

答えて

8

ただ、整数の除算を使用します。

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

ここでは完全にあなたがsubstr()を使用することができます文字

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

に番号を変換回避機能です。ヘルプページ?substrを参照してください。あなたの関数では、私はどうなる:与える

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

> splitnum(1293828893) 
[1] 3828 

は、あなたが文字列として数字をしたい最後の行にas.numeric(....)折り返しを削除します。

関連する問題