On Nov 13, 2010, at 12:34 PM, T.D. Rudolph wrote:
>
> Is there any really easy way to truncate integers with several
> consecutive
> digits without rounding and without converting from numeric to
> character
> (using strsplit, etc.)?? Something along these lines:
>
> e.g. = 456
>
> truncfun(e.g., location=1)
> = 4
>
> truncfun(e.g., location=1:2)
> = 45
>
> truncfun(e.g., location=2:3)
> = 56
>
> truncfun(e.g., location=3)
> = 6
>
> It's one thing using floor(x/100) to get 4 or floor(x/10) to get 45,
> but I'd
> like to return only 5 or only 6, for example, in cases where I don't
> know
> what the numbers are going to be.
>
> I'm sure there is something very logical that I am missing, but my
> code is
> getting too complicated and I can't seem to find a parsimonious
> solution.
Modulo arithmetic? (not the same location arguments as you specified
but should give you ideas to work with:
trncint <- function(x, left=0,length=0) (x %% 10^(left) ) %/%
10^(left-length)
> trncint(456, 2,2)
[1] 56
> trncint(456, 3,2)
[1] 45
> trncint(456, 3,1)
[1] 4
> trncint(456, 2,1)
[1] 5
> trncint(456, 3,1)
[1] 4
> trncint(456, 1,1)
[1] 6
--
David Winsemius, MD
West Hartford, CT