我有一个向量在范围内[1,10]
c(1,2,9,10)
我想将其映射到不同的范围,例如[12,102]
c(12,22,92,102)
R 中是否已经有一个函数可以执行此操作?
linMap <- function(x, from, to)
(x - min(x)) / max(x - min(x)) * (to - from) + from
linMap(vec, 12, 102)
# [1] 12 22 92 102
或者更明确地说:
linMap <- function(x, from, to) {
# Shifting the vector so that min(x) == 0
x <- x - min(x)
# Scaling to the range of [0, 1]
x <- x / max(x)
# Scaling to the needed amplitude
x <- x * (to - from)
# Shifting to the needed level
x + from
}
rescale(vec, c(12, 102))
使用该包进行工作scales
。也可以利用approxfun
按照@flodel的建议,以一种聪明的方式:
linMap <- function(x, a, b) approxfun(range(x), c(a, b))(x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)