6

R我有一个号码,比如说1293828893,叫x

我想拆分这个数字,去掉中间的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 方法R的实现,但这一步特别棘手。

4

3 回答 3

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(....)您希望将数字作为字符串的最后一行的换行。

于 2012-10-09T19:45:36.543 回答
8

只需使用整数除法:

> x <- 1293828893
> (x %/% 1e3) %% 1e4
[1] 3828
于 2012-10-09T19:43:02.050 回答
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
于 2012-10-09T19:45:31.667 回答