Hello,

RNoob wrote
> 
> Dear all,
> 
> I am trying to apply the aggregate() function to calculate correlations
> for subsets of a dataframe. My argument x is supposed to consist of 2
> numerical vectors, which represent x and y for the cor() function. 
> 
> The following error results when calling the aggregate function: Error in
> FUN(X[[1L]], ...) : supply both 'x' and 'y' or a matrix-like 'x'. I think
> the subsets aggregate puts into cor() are sort of list types and therefore
> can't be handled by cor().
> 
> Can anyone provide me with a solution?
> 
> Regards,
> RNoob
> 

I don't know if I'm understanding it well but it seems you're trying to
compute a correlation matrix for each group of a data.frame. The data.frame
is divided into groups by one or more factor columns.  If this is what you
want, try the function below. It doesn't use 'aggregate', it uses 'split'
and 'lapply'.


cor.groups <- function(x, vars){
        cols <- if(is.character(vars)) names(x) else 1:ncol(x)
        cols <- cols %in% vars
        cols <- cols | sapply(x, is.factor) | sapply(x, is.character)
        # transform logical to numeric index
        cols <- which(cols)

        lapply(split(x, x[, vars]), function(grp) cor(grp[, -cols]))
}

# Sample data
N <- 100
DF <- data.frame(U=as.factor(sample(LETTERS[1:3], N, T)),
                        V=as.factor(sample(0:1, N, T)),
                        W=sample(letters[1:6], N, T),
                        x=1:N, y=sample(10, N, T), z=rnorm(N),
                        stringsAsFactors=FALSE)

# And test it. Note the argument 'stringsAsFactors'

cor.groups(DF, "U")
cor.groups(DF, c("U", "V"))
cor.groups(DF, 1:3)
cor.groups(DF, c("U", "x"))     # look out, right result, wrong function
call


I hope it helps. (if not, be more explicit)

Rui Barradas


--
View this message in context: 
http://r.789695.n4.nabble.com/Using-Aggregate-with-FUN-arguments-which-require-more-than-one-input-variables-tp4303936p4304535.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help@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.

Reply via email to