归一化Z-score

创建数据

df <- data.frame(x=c(1,2,3,4),y=c(7,4,6,10),z=c(5,6,9,12))
rownames(df) <- LETTERS[1:nrow(df)]
df

x y z
A 1 7 5
B 2 4 6
C 3 6 9
D 4 10 12

试运行

  • scale函数直接运行
scale_df <- as.data.frame(scale(df))
scale_df 

x y z
A -1.1618950 0.1 -0.9486833
B -0.3872983 -1.1 -0.6324555
C 0.3872983 -0.3 0.3162278
D 1.1618950 1.3 1.2649111


  • 自定义scale函数直接运行,此处以行为单位批量运行
scale_df2 =apply(df,1,scale)
scale_df2

A B C D
[1,] -1.0910895 -1 -1 -1.1208971
[2,] 0.8728716 0 0 0.3202563
[3,] 0.2182179 1 1 0.8006408


  • 单次运行数组(数据框中的行)
scale(c(1,7,5))

[,1]
[1,] -1.0910895
[2,] 0.8728716
[3,] 0.2182179
attr(,"scaled:center")
[1] 4.333333
attr(,"scaled:scale")
[1] 3.05505


  • 单次运行数组(数据框中的列)
scale(c(1,2,3,4))

[,1]
[1,] -1.1618950
[2,] -0.3872983
[3,] 0.3872983
[4,] 1.1618950
attr(,"scaled:center")
[1] 2.5
attr(,"scaled:scale")
[1] 1.290994

结论

综上,假如以行为单位进行统一的归一化处理,正确的代码如下

scale_df2 = t(apply(df,1,scale))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【健康分享】为什么颈椎病不能拖?你一定要知道。 1:人体的衰老从肩颈开始。肩颈是毒素最容易堆积的地方,是致...
    幸福的约定zy阅读 173评论 0 0
  • 有一句话叫做养儿方知父母恩,生孩子也一样,生过孩子才能深刻体会到母亲的伟大。 在上篇《孕期那些事》里最后说到,宝宝...
    任家李拉拉阅读 360评论 0 2
  • 前几天和一个朋友聊天,他问我在干啥,我说看一个纪录片,关于张纯如的,随后发表了一些观后感,“了解历史才懂得珍惜现在...
    攒够六便士阅读 765评论 0 0