如何按组计算Z-score

时间:2014-01-15 14:42:31

标签: r

我想使用每组产生的平均值和标准偏差来计算Z分数。例如,我有下表。它有3组数据,我可以为每个组生成平均值和标准差。然后我使用组1均值和SD来计算第一组数据点的Zscores等等......

> dat
   group level    y
1      1     A 10.8
2      1     B 12.0
3      1     C  9.6
4      1     A 12.0
5      1     B  7.8
6      1     C 10.8
7      2     A  8.7
8      2     B  9.2
9      2     C  8.2
10     2     A 10.0
11     2     B 12.2
12     2     C  8.2
13     3     A 10.9
14     3     B  8.3
15     3     C 10.1
16     3     A  9.9
17     3     B 10.9
18     3     C 10.3

我从这个博客中了解到如何按组获取摘要数据,但不知道如何从那里开始。

感谢。

4 个答案:

答案 0 :(得分:7)

Base R(即,不需要依赖项)包括函数ave()(用于分组应用)和scale()(用于计算z分数):

dat$z <- ave(dat$y, dat$group, FUN=scale)

然后z中的新变量dat将包含groupwise-scaled变量。

答案 1 :(得分:3)

我会查看data.table

类似的东西:

require(data.table)
datDT <- data.table(dat)
datDT[, yScaled := scale(y), by = group]

答案 2 :(得分:2)

您可以使用plyr的ddply函数并计算z得分。

library(plyr)
dat <-  ddply(dat, .(group), summarize, z_score=scale(y))

或者您可以手动计算 -

dat <-  ddply(dat, .(group), summarize, z_score=(y-mean(y))/sd(y)))

如果你的数据中有na,那么在均值和sd函数中添加na.rm = True。

希望这有帮助。

答案 3 :(得分:1)

dplyr

library(dplyr)

dat_z = dat %>%
        group_by(group) %>%
        mutate(z_score = scale(y))