【发布时间】:2022-01-21 16:08:21
【问题描述】:
我是 R 的新手。我希望编写一个函数来缩放我的数据框中的所有数字列,除了特定的数字列(在下面的示例中,我不想缩放列“估计”)。由于使用此函数的特定上下文,我实际上想使用另一个数据框来缩放数据。下面是一个失败的尝试。在这个尝试中 original.df 表示需要缩放的数据框,scaling.data 表示用于缩放的数据。我试图将数字 original.df 列集中在相应 scaling.data 列的平均值上,然后除以 scaling.data 列的 2 个标准差。
对于工作解决方案可能不是必不可少的其他信息:
这个函数将嵌套在一个更大的函数中。在较大的函数中有一个称为 predictors 的参数,它表示需要包含在新数据框中的列名称,并且在缩放数据框中也可以找到。这可能是用于迭代缩放函数的向量,尽管这不是必需的。 (注意:此向量包括引用字符和数字列的列名,我再次希望该函数仅缩放数字列。最终产品应包括 original.df 中未缩放的“估计”列)。
> predictors
[1] "color" "weight" "height" "length"
>original.df
color weight height length estimate
1 red 10 66 40 5
2 red 12 60 41 7
3 yellow 12 67 48 9
4 blue 15 55 36 10
5 yellow 21 54 48 7
6 red 12 54 43 5
7 red 11 38 36 6
>scale.data
color weight height length estimate
1 red 11 55 41 7
2 red 13 67 39 9
3 yellow 12 67 46 11
4 blue 16 8 37 5
5 yellow 23 10 47 9
6 red 17 11 41 10
7 red 16 13 37 13
scale2sd<-function(variable){
original.df[[variable]]<-((original.df[[variable]]) - mean(scaling.data[[variable]],na.rm=TRUE))/(2*sd(scaling.data[[variable]], na.rm=TRUE))
return(original.df[[variable]])
}
new.df<-original.df %>%mutate_at((!str_detect(names(.),"estimate")&is.numeric),scale)
我需要结果是全新的缩放数据框。
非常感谢您的时间和想法。
【问题讨论】: