2013-12-23 56 views
2

我真的很感谢您对此问题的帮助。 我有以下数据集,我想创建一个新变量,其中包含给定因子变量的每个级别的标准化值(z分布)。如何根据因子水平对变量进行标准化并在R中创建新变量

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

您可以使用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) 

而且有很多的使用ddply从plyr,tapplydata.table方式。看看this post

+1

。 –

0

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

这里的计算位数为每个因子水平的方式:你不需要`with`内`transform`

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 
相关问题