[R] Getting group-wise standard scores of a vector
Erik Iverson
iverson at biostat.wisc.edu
Wed Sep 26 23:27:25 CEST 2007
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