将数字划分为 0-1 之间的等距间隔

Divide numbers into equally-spaced intervals ranging between 0-1

假设我在向量中有这一系列数字:

vec <- c(1,2,3,4,5)           # just an example, numbers could be far higher

如何以编程方式将这些数字划分为介于 0-1 之间的等距间隔,以便我得到:

有什么想法吗?

如果我理解得很好的话可能是这样的:

v <- 1:5
norm <- function(x){
  if(length(x)==1)0 else{
    (x-min(x))/(max(x)-min(x))
  }
  }
lapply(v, function(x)(norm(seq(1,x,length.out = x))))

输出

[[1]]
[1] 0

[[2]]
[1] 0 1

[[3]]
[1] 0.0 0.5 1.0

[[4]]
[1] 0.0000000 0.3333333 0.6666667 1.0000000

[[5]]
[1] 0.00 0.25 0.50 0.75 1.00

我们可以使用 seqlength.out 参数:

lapply(1:5, function(i) seq(0, 1, length.out =  i))
# [[1]]
# [1] 0
# 
# [[2]]
# [1] 0 1
# 
# [[3]]
# [1] 0.0 0.5 1.0
# 
# [[4]]
# [1] 0.0000000 0.3333333 0.6666667 1.0000000
# 
# [[5]]
# [1] 0.00 0.25 0.50 0.75 1.00

映射:

mapply(seq, from = 0, to = 1, length.out = 1:5)

使用map

library(purrr)
map(1:5, ~ seq(0, 1, length.out = .x))

-输出

[[1]]
[1] 0

[[2]]
[1] 0 1

[[3]]
[1] 0.0 0.5 1.0

[[4]]
[1] 0.0000000 0.3333333 0.6666667 1.0000000

[[5]]
[1] 0.00 0.25 0.50 0.75 1.00