3

我非常感谢您在这个问题上的帮助。我有以下数据集,我想创建一个新变量,该变量将包含给定因子变量的每个级别的标准化值(z 分布)。

x <- data.frame(gender = c("boy","boy","boy","girl","girl","girl"),
                values=c(1,2,3,6,7,8)) 
x

   gender values
1    boy      1
2    boy      2  
3    boy      3
4   girl      6
5   girl      7
6   girl      8

我的目标是创建一个新变量,其中包含为每个因子水平(男孩和女孩)分别计算的 z 值。

还有一个问题。我主要想用 z 值创建一个变量。如果我想应用另一个函数,例如计算每个因子水平的分位数分布,会不会类似?

谢谢您的帮助!

4

2 回答 2

4

您可以scale使用avetransform

> transform(x, z_score=ave(values, gender, FUN=scale))
  gender values z_score
1    boy      1      -1
2    boy      2       0
3    boy      3       1
4   girl      6      -1
5   girl      7       0
6   girl      8       1

aggregate也很有用

> aggregate(values ~ gender, scale, data=x)

并且有很多方法可以使用ddplyfrom plyr, tapply, data.table. 看看这个帖子

于 2013-12-23T14:06:33.920 回答
0

如何创建 z 分数的问题已经得到解答。

这是一种计算每个因子水平的分位数的方法:

with(x, tapply(values, gender, FUN = quantile))
# $boy
#   0%  25%  50%  75% 100% 
#  1.0  1.5  2.0  2.5  3.0 
#
# $girl
#   0%  25%  50%  75% 100% 
#  6.0  6.5  7.0  7.5  8.0 
于 2013-12-23T14:16:51.317 回答