[R] Specifying parameters for use in "plyr" / "ddply"

Peter Ehlers ehlers at ucalgary.ca
Wed Apr 7 17:41:36 CEST 2010


On 2010-04-07 8:37, Dimitri Liakhovitski wrote:
> Dear R-ers!
>
> # I have a data frame with one factor and 2 numeric variables:
> x<-data.frame(group=c("b","b","d","d","e","e"),a=c(1,NA,10,20,100,200),b=c(5,15,20,NA,10,30))
> x
>
> # I want to divide each value of each variable by its group mean -
> using plyr and ddply. It works fine, for example, for variable "a":
> library(plyr)
> x2<-ddply(x, "group", transform, a = a / mean(a, na.rm = T))
> x2
>
> # Because I want to do the same for both variables (a and b) I want to
> put it into a function.
> # So, I am parametrising the grouping variable and the variable to transform.
> # However, my code below is not working - I know that x[[variable]] is
> not correct - but what is the right way of doing it?
> grouping.factor<-"group"
> variable<-"a"
> x2<-ddply(x, grouping.factor, transform, x[[variable]] = x[[variable]]
> / mean(x[[variable]], na.rm = T))
>
>
> Or is there a more effective way of using ddply on a bunch of variables?
> Thank you very much for your advise!
>
Yes, there is: colwise()

   f <- function(x) x / mean(x, na.rm = TRUE)
   ddply(x, "group", colwise(f, c("a", "b")))

-- 
Peter Ehlers
University of Calgary



More information about the R-help mailing list