R 如何将向量转换为单个数字
假设我有一个向量R 如何将向量转换为单个数字,r,vector,R,Vector,假设我有一个向量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 有什么简单的方法吗?也许你可以试试 > sum(x*10**rev(seq_along(x)-1))*2 [1] 24690 或者是@Roland的变体 > 2 * x %*% (10 ^ rev(seq_along(x))
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
有什么简单的方法吗?也许你可以试试
> 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
另一个带有
Reduce()的选项
您可以使用nchar
和cumprod
获取数字,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
x使用粘贴
和折叠
as.numeric( paste(x, collapse=''))
#[1] 12345
纯溶液,含减少,+1@谢谢你的回复。其实我更喜欢你的答案。我的帖子只是一个可能效率较低的替代方案+1.您的第一个解决方案比在字符串上绕道要好得多。变化量为x%*%(10^rev(沿(x)方向的顺序))/10)
。
x <- c(1, 22, 333)
rev(x) %*% cumprod(c(1, 10^nchar(rev(x[-1]))))
# [,1]
#[1,] 122333
as.numeric( paste(x, collapse=''))
#[1] 12345