我想要转换数据集中除变量之外的所有变量,并将这些新的变换变量包含到新数据集中。我想这不应该那么困难,但是我遇到了一些问题。我想要做的转变是等级的最小 - 最大规范。我一直在运行以下代码:
#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
我想知道是否有人可以帮助我。提前谢谢。
答案 0 :(得分:1)
rank
和normalize
都采用向量。你不能给他们数据框。
sapply
和lapply
是将功能应用于数据框列的经典实用工具。有几种方法可以做到:
# 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],rank)
dt [cols] = lapply(dt [cols],normalize)