在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 method的R
中创建一个实现,但这一步特别棘手。
答案 0 :(得分: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(....)
包装。
答案 1 :(得分:8)
只需使用整数除法:
> x <- 1293828893
> (x %/% 1e3) %% 1e4
[1] 3828
答案 2 :(得分: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