我尝试标准化给定data.frame
中的所有变量,并将这些标准化变量添加到original data.frame
,其中包含一些前缀名称,如{{1} (例如,如果原始变量的名称为"s."
,则标准名称为wt
)。
我的功能如下,但我想知道为什么我无法访问新的标准化变量? (见下面的例子)
s.wt
答案 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