我想使用每组产生的平均值和标准偏差来计算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
我从这个博客中了解到如何按组获取摘要数据,但不知道如何从那里开始。
感谢。
答案 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))