Yolof
Yolof

Reputation: 51

How do I change a vector into a single number

Lets say I have a vector x which is

x = c(1,2,3,4,5)

and I want it to have a single length of all the numbers in the vector so that the end result looks like this:

x = 12345

If I then want to example multiply it by 2 it would show: 12345*2 = 24690

Instead of: 1,2,3,4,5 * 2 = 2,4,6,8,10

Any easy way to do it?

Upvotes: 4

Views: 864

Answers (4)

akrun
akrun

Reputation: 887881

using paste with collapse

as.numeric( paste(x, collapse=''))
#[1] 12345

Upvotes: 1

GKi
GKi

Reputation: 39717

You can use nchar and cumprod to get the digits, rev to reverse them and %*% to multiply and sum it.

rev(x) %*% cumprod(c(1, 10^nchar(rev(x[-1]))))
#      [,1]
#[1,] 12345

rev(x) %*% cumprod(c(1, 10^nchar(rev(x[-1])))) * 2
#      [,1]
#[1,] 24690

And for more than 1 digit:

x <- c(1, 22, 333)
rev(x) %*% cumprod(c(1, 10^nchar(rev(x[-1]))))
#       [,1]
#[1,] 122333

Upvotes: 2

ThomasIsCoding
ThomasIsCoding

Reputation: 102700

Maybe you can try

> sum(x*10**rev(seq_along(x)-1))*2
[1] 24690

or the variation by @Roland

> 2 * x %*% (10 ^ rev(seq_along(x)) / 10
[1] 24690

or define function f like below

f <- function(x, l = length(x)) ifelse(l==1,x,f(x[1:(l-1)],l-1)*10 + x[l])
> f(x)*2
[1] 24690

or play a trick with paste + as.numeric

> as.numeric(paste(x,collapse = ""))*2
[1] 24690

Upvotes: 2

Darren Tsai
Darren Tsai

Reputation: 35604

Another option with Reduce()

as.numeric(Reduce(paste0, x))
# [1] 12345

Upvotes: 4

Related Questions