[英]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
之間的等距間隔,這樣我得到:
為了
0
0, 1
0, 0.5, 1
0, 0.33, 0.66, 1
0, 0.25, 0.50, 0.75, 1
任何想法?
我們可以將seq與length.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)
如果我理解得很好,也許是這樣的:
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))))
output
[[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
使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.