在R中的data.frame中标准化和重命名变量?

时间:2018-03-17 16:41:35

标签: r dataframe

我尝试标准化给定data.frame中的所有变量,并将这些标准化变量添加到original data.frame,其中包含一些前缀名称,如{{1} (例如,如果原始变量的名称为"s.",则标准名称为wt)。

我的功能如下,但我想知道为什么我无法访问新的标准化变量? (见下面的例子

s.wt

1 个答案:

答案 0 :(得分:3)

假设我们需要在OP函数中添加带有后缀'的新列,则分配到单个列,即dataframe$s,而缩放列的数量list返回的内容与数据集中的列数相同。因此,我们可以使用paste创建带有后缀的新列'

standard <- function(dataframe = mtcars){
  var.names <- names(dataframe)
  dataframe[paste0("s.", var.names)] <- lapply(dataframe[var.names], function(x) c(scale(x)))
  dataframe
 }

standard()$s.wt
#[1] -0.610399567 -0.349785269 -0.917004624 -0.002299538  0.227654255  0.248094592  0.360516446 -0.027849959 -0.068730634  0.227654255  0.227654255
#[12]  0.871524874  0.524039143  0.575139986  2.077504765  2.255335698  2.174596366 -1.039646647 -1.637526508 -1.412682800 -0.768812180  0.309415603
#[23]  0.222544170  0.636460997  0.641571082 -1.310481114 -1.100967659 -1.741772228 -0.048290296 -0.457097039  0.360516446 -0.446876870

注意:scale的输出是matrix,只有一列,使用c,它会转换为vectorr

此外,我们可以在整个数据集上应用该功能

mtcars[paste0("s.", names(mtcars))] <- scale(mtcars)
identical(mtcars$s.wt, standard()$s.wt)
#[1] TRUE