Rank 和 min-max norm r 数据集中的所有变量

Rank and min-max norm all variables in a dataset in r

我想转换数据集中除一个变量之外的所有变量,并将这些新的转换变量包含到新数据集中。我想这应该不会那么困难,但是我已经 运行 解决了一些问题。我正在尝试进行的转换是等级的最小-最大范数。我已经运行宁以下代码:

#create min-max norm function
normalize <- function(x) {
    return((x-min(x))/(max(x)-min(x)))
}

cols <- c(1:ncol(dt))
dt[cols] <- normalize(rank(dt[cols]))

但是,当我 运行 此代码时,我收到以下错误:

 Error: Can't use matrix or array for column indexing

我想知道是否有人可以帮助我。提前谢谢你。

ranknormalize 都采用向量。你不能给他们数据框。

sapplylapply 向数据框的列应用 ing 函数的经典实用程序。有几种方法可以做到:

# one step with an anonymous function, calling both normalize and rank
dt[cols] = lapply(dt[cols], function(x) normalize(rank(x)))

但是,您的错误似乎表明您的 cols 对象是矩阵或数组。因此,请确保 cols 是您认为的那样。而我上面提到的方法假设dt是一个data.frame(或data.table,或tibble)。如果 dtmatrixarray 或其他,它们将不会按预期工作。查看 str(dt) 进行检查(如果您仍然有问题,也许可以将该信息编辑到您的问题中)。 # 两个步骤,一次一个 dt[cols] = lapply(dt[cols], 排名) dt[cols] = lapply(dt[cols], 归一化)