我有一个示例数据框:
data<-data.frame(a=c(1,2,3),b=c(4,5,5),c=c(6,8,7),d=c(8,9,10))
并希望计算数据框中每一行的z分数,并且确实:
scores<-apply(data,1,zscore)
我使用了
中的zscore函数install.packages(c("R.basic"), contriburl="http://www.braju.com/R/repos/")
并获得了这个
row.names V1 V2 V3
a -1.2558275 -1.2649111 -1.0883839
b -0.2511655 -0.3162278 -0.4186092
c 0.4186092 0.6324555 0.2511655
d 1.0883839 0.9486833 1.2558275
但是当我尝试手动计算数据框第一行的z分数时,我得到以下值:
-1.45 -0.29 0.4844, 1.25
手动,对于第一行,我计算如下:
1)计算第一行的行平均值(4.75)
2)从行均值中减去每个值(例如4.75-1。,4.75-4。,4.75-6。,4.75-8)
每个差异都是正方形。4)将它们相加并除以第1行中的样品量
5)因此我得到方差(答案= 6.685)然后得到第一行的标准差(2.58)
6)然后应用z得分的公式。
答案 0 :(得分:6)
zscore
函数,无论它是什么,似乎与scale
包中的base
相同。
apply(data, 1, scale)
## [,1] [,2] [,3]
## [1,] -1.2558275 -1.2649111 -1.0883839
## [2,] -0.2511655 -0.3162278 -0.4186092
## [3,] 0.4186092 0.6324555 0.2511655
## [4,] 1.0883839 0.9486833 1.2558275
对于每列,它正在计算(x - mean(x)) / sd(x)
。