[R] my ugly apply/sweep code needs help
Tyler Smith
tyler.smith at mail.mcgill.ca
Sat May 19 01:46:50 CEST 2007
Hi,
I have a matrix of data from from several groups. I need to center the
data by group, subtracting the group median from each value, initially
for two groups at a time. I have a working function to do this, but it
looks quite inelegant. There must be a more straightforward way to do
this, but I always get tangled up in apply/sweep/subset
operations. Any suggestions welcome!
Thanks,
Tyler
My code:
Notes: data.mat is an nxm matrix of data. group.vec is a vector of
length n with grouping factors. group.sel is a vector of length 2 of
the groups to include in the analysis.
sweep.median <- function (data.mat, group.vec, group.sel) {
data.sub1 <- data.mat[group.vec %in% group.sel[1],]
data.sub2 <- data.mat[group.vec %in% group.sel[2],]
data.sub1.med <- apply(data.sub1, MAR=2, median)
data.sub1.cent <- sweep(data.sub1, MARGIN=2, data.sub1.med)
data.sub2.med <- apply(data.sub2, MAR=2, median)
data.sub2.cent <- sweep(data.sub2, MARGIN=2, data.sub2.med)
data.comb <- rbind(data.sub1.cent, data.sub2.cent)
data.comb <- cbind(c(rep(group.sel[1],nrow(data.sub1.cent)),
rep(group.sel[2],nrow(data.sub2.cent))),
data.comb)
return(data.comb)
}
More information about the R-help
mailing list