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

时间:2018-05-25 16:15:59

标签: r transform transformation

我想要转换数据集中除变量之外的所有变量,并将这些新的变换变量包含到新数据集中。我想这不应该那么困难,但是我遇到了一些问题。我想要做的转变是等级的最小 - 最大规范。我一直在运行以下代码:

#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

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

1 个答案:

答案 0 :(得分:1)

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

sapplylapply功能应用于数据框列的经典实用工具。有几种方法可以做到:

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

但是,您的错误似乎表明您的cols对象是矩阵或数组。因此,请确保cols符合您的想法。我上面提到的方法假设dtdata.frame(或data.tabletibble)。如果dtmatrixarray或其他内容,则它们将无法按预期工作。查看str(dt)以检查(如果仍有问题,可能会将该信息编辑到您的问题中)。     #两步,一次一个     dt [cols] = lapply(dt [cols],rank)     dt [cols] = lapply(dt [cols],normalize)