如何基于因子水平标准化变量并在R中创建新变量

时间:2013-12-23 14:01:44

标签: r calculated-columns r-factor

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

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

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

另一个问题。我主要想用z值创建一个变量。如果我想应用另一个函数并且例如计算每个因子级别的分位数分布,它会是相似的吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以将scaleavetransform

一起使用
> 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)

使用来自plyr ddplytapply的{​​{1}}有很多方法。看看this post

答案 1 :(得分: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