[R] Getting group-wise standard scores of a vector

Matthew Dubins matt.dubins at utoronto.ca
Thu Sep 27 00:01:00 CEST 2007


Hi,

Thanks so much!  I got what I needed:  z scores, according to group 
membership, in one vector.

Matthew Dubins

Erik Iverson wrote:
> Hello -
>
> First, I doubt you really want to cbind() those two vectors within the 
> data.frame() function call.
>
> test.data <- data.frame(x, group)  is probably what you want.  That 
> may be the source of your trouble.
>
> If you really want a vector returned, the following should work given 
> your test.data is constructed without the cbind():
>
> unlist(by(test.data$x, test.data$group, function(x) (x - mean(x)) / 
> sd(x)), use.names = FALSE)
>
> Is that what you're after?
>
> Erik
>
>
> Matthew Dubins wrote:
>> Hi,
>>
>> I want to be able to create a vector of z-scores from a vector of 
>> continuous data, conditional on a group membership vector.
>>
>> Say you have 20 numbers distributed normally with a mean of 50 and an 
>> sd of 10:
>>
>> x <- rnorm(20, 50, 10)
>>
>>
>> Then you have a vector that delineates 2 groups within x:
>>
>> group <- sort(rep(c("A", "B"), 10))
>>
>> test.data <- data.frame(cbind(x, group))
>>
>> I know that if you break up the x vector into 2 different vectors 
>> then it becomes easy to calculate the z scores for each vector, then 
>> you stack them and append them to the original
>> data frame.  Is there anyway to apply this sort of calculation 
>> without splitting the original vector up?  I tried a really complex 
>> ifelse statement but it didn't seem to work.
>>
>> Thanks in advance,
>> Matthew Dubins
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide 
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list