## ----------------------------------------------------------------------------- m <- matrix(1:15, nrow=5, ncol=3) m ## ----------------------------------------------------------------------------- # sum values in each row apply(m, 1, sum) # get mean for each column apply(m, 2, mean) ## ----------------------------------------------------------------------------- rowSums(m) ## ----------------------------------------------------------------------------- colnames(m) <- c('v1', 'v2', 'v3') d <- data.frame(name=c('Yi', 'Yi', 'Yi', 'Er', 'Er'), m, stringsAsFactors=FALSE) d$v2[1] <- NA d ## ----------------------------------------------------------------------------- tapply(d$v1, d$name, mean) tapply(d$v1, d$name, max) tapply(d$v2, d$name, mean) tapply(d$v2, d$name, mean, na.rm=TRUE) ## ----------------------------------------------------------------------------- aggregate(d[, c("v1", "v2", "v3")], d$name, mean, na.rm=TRUE) ## ----------------------------------------------------------------------------- aggregate(d[, c("v1", "v2", "v3")], d[, "name", drop=FALSE], mean, na.rm=TRUE) # or aggregate(d[, c("v1", "v2", "v3")], list(d$name), mean, na.rm=TRUE) ## ----------------------------------------------------------------------------- names <- list("Antoinette", "Mary", "Duncan", "Obalaya", "Jojo") nchar("Jim") lapply(names, nchar) sapply(names, nchar) ## ----------------------------------------------------------------------------- shortname <- function(name) { if (nchar(name) < 5) { name <- toupper(name) return(name) } else { name <- substr(name,1,5) return(name) } } sapply(names, shortname)