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
我想知道是否有人可以帮助我。提前谢谢你。
rank
和 normalize
都采用向量。你不能给他们数据框。
sapply
和 lapply
是 向数据框的列应用 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
)。如果 dt
是 matrix
、array
或其他,它们将不会按预期工作。查看 str(dt)
进行检查(如果您仍然有问题,也许可以将该信息编辑到您的问题中)。
# 两个步骤,一次一个
dt[cols] = lapply(dt[cols], 排名)
dt[cols] = lapply(dt[cols], 归一化)
我想转换数据集中除一个变量之外的所有变量,并将这些新的转换变量包含到新数据集中。我想这应该不会那么困难,但是我已经 运行 解决了一些问题。我正在尝试进行的转换是等级的最小-最大范数。我已经运行宁以下代码:
#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
我想知道是否有人可以帮助我。提前谢谢你。
rank
和 normalize
都采用向量。你不能给他们数据框。
sapply
和 lapply
是 向数据框的列应用 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
)。如果 dt
是 matrix
、array
或其他,它们将不会按预期工作。查看 str(dt)
进行检查(如果您仍然有问题,也许可以将该信息编辑到您的问题中)。
# 两个步骤,一次一个
dt[cols] = lapply(dt[cols], 排名)
dt[cols] = lapply(dt[cols], 归一化)