2013-12-23 55 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 
相關問題