2012-10-09 18 views
6

R我有一個號碼,說1293828893,叫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); 
} 

這是一個非常簡單的問題,但我已經找到了唯一的解決方案,適用於字符串,而不是數字字符串。

如果有興趣,我試圖在Middle-square methodR中創建一個實現,但這一步特別棘手。

回答

8

只需使用整數除法:

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

這裏是一個完全避免了數字轉換爲字符

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()的功能。請參閱其幫助頁?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(....)包裝。