如何缩放系列,使得系列中的第一个数字为0,最后一个数字为1.我查看了"约","缩放",但它们没有实现此目标.
# generate series from exponential distr
s = sort(rexp(100))
# scale/interpolate 's' such that it starts at 0 and ends at 1?
# approx(s)
# scale(s)
Run Code Online (Sandbox Code Playgroud) 可能重复:
在R中的两个点之间缩放一系列
是否知道R函数在向量上执行范围标准化?我希望将变量转换为0到1之间的比例,同时保留排名顺序和值之间的相对大小.
为了清楚起见,我不打算通过SD的中心和缩放来标准化变量,就像在函数scale()中所做的那样.
我在包'dprep'中尝试了函数mmnorm()和rangenorm(),但这些似乎没有完成这项工作.
这是我的数字矩阵的摘录
[1,] 30 -33.129487 3894754.1 -39.701738 -38.356477 -34.220534
[2,] 29 -44.289487 -8217525.9 -44.801738 -47.946477 -41.020534
[3,] 28 -48.439487 -4572815.9 -49.181738 -48.086477 -46.110534
[4,] 27 -48.359487 -2454575.9 -42.031738 -43.706477 -43.900534
[5,] 26 -38.919487 -2157535.9 -47.881738 -43.576477 -46.330534
[6,] 25 -45.069487 -5122485.9 -47.831738 -47.156477 -42.860534
[7,] 24 -46.207487 -2336325.9 -53.131738 -50.576477 -50.410534
[8,] 23 -51.127487 -2637685.9 -43.121738 -47.336477 -47.040534
[9,] 22 -45.645487 3700424.1 -56.151738 -47.396477 -50.720534
[10,] 21 -56.739487 1572594.1 -49.831738 -54.386577 -52.470534
[11,] 20 -46.319487 642214.1 -39.631738 -44.406577 -41.490534
Run Code Online (Sandbox Code Playgroud)
我现在要做的是将每列的值缩放为0到1的值.
我尝试使用 …
我最近开始使用 are,我想扩展我的数据矩阵。我在这里找到了一种方法来在两点之间缩放一个系列
x <- data.frame(step = c(1,2,3,4,5,6,7,8,9,10))
normalized <- (x-min(x))/(max(x)-min(x))
Run Code Online (Sandbox Code Playgroud)
由于我的数据由几列组成,因此我只想使用建议的函数对某些列进行规范化。
normalized <- function(x) (x- min(x))/(max(x) - min(x))
x[] <- lapply(x, normalized)
Run Code Online (Sandbox Code Playgroud)
此外,我意识到我的数据集中的某些数据点等于 0,因此所提供的公式不再适用。我在这里添加了一个扩展建议:将r 数据帧缩放到 0-1 与 NA 值
normalized <- function(x, ...) {(x - min(x, ...)) / (max(x, ...) - min(x, ...))}
Run Code Online (Sandbox Code Playgroud)
但我不明白我必须如何编码。例如,我想让第 4、5、6 和 10 列标准化,但我想让其余的列保持在数据集中的状态?我在第 4 列中尝试过:
data <- lapply(data[,4],normalized,na.rm= TRUE)
Run Code Online (Sandbox Code Playgroud)
但它没有用(而不是数据框,结果是一个列表:-(...),有谁知道我如何解决它?
非常感谢!
我有一个像这样的数据框:
df <- data.frame(x1=c(1, 2, 3, 2, 1),
x2=c(1, 10, 5, 8, 3))
Run Code Online (Sandbox Code Playgroud)
我正在尝试将两个变量标准化为 0 和 1 之间。因此 2 英寸x1将是 0.5,5 英寸x2也将是 0.5。
我尝试过使用以下标准化函数:
range01 <- function(x){(x-min(x, na.rm = T))/(max(x, na.rm = T)-min(x, na.rm = T))}
df <- range01(df)
Run Code Online (Sandbox Code Playgroud)
相反,它通过整个数据帧的范围(1 到 10)对所有变量进行标准化,给出:
x1 x2
0.0000000 0.0000000
0.1111111 1.0000000
0.2222222 0.4444444
0.1111111 0.7777778
0.0000000 0.2222222
Run Code Online (Sandbox Code Playgroud)
如何根据两列各自的范围对它们进行标准化?我需要一个系统函数来执行此操作,因为我在 for 循环中处理多个数据帧中的许多变量。