如何将一个向量转换为单个数字?

4
假设我有一个向量x,它是:
x = c(1,2,3,4,5)

我希望向量中的所有数字长度相同,以便最终结果如下:

x = 12345

如果我想把它乘以2,它会显示:12345*2 = 24690

而不是:1,2,3,4,5 * 2 = 2,4,6,8,10

有什么简单的方法可以做到这一点吗?

4个回答

4

Reduce() 的另一个选项

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

1
使用Reduce的简洁解决方案,加1! - ThomasIsCoding
@ThomasIsCoding 感谢您的回复。实际上我更倾向于您的答案。我的帖子只是一个可能不太高效的替代方案。+1! - Darren Tsai

2
也许你可以尝试一下。
> sum(x*10**rev(seq_along(x)-1))*2
[1] 24690

或由@Roland提出的变体

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

或者像下面这样定义函数f
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

或者使用“粘贴”+“as.numeric”来玩一个小技巧。
> as.numeric(paste(x,collapse = ""))*2
[1] 24690

2
你的第一个解决方案比任何绕过字符字符串的迂回路线都要好得多。一种变化是 x %*% (10 ^ rev(seq_along(x)) / 10) - Roland

2
您可以使用ncharcumprod来获取数字,rev来翻转它们,%*%来进行乘法和求和。
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

对于超过1位数的数字:

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

1
使用pastecollapse实现文本拼接
as.numeric( paste(x, collapse=''))
#[1] 12345

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接