There are several ways to do this. Here are some of them that I like (all suggest that we start with data.frame named "mydf"):
Using ave and unique
unique(within(mydf, { Amount <- ave(Amount, Manager, FUN = sum) SqFt <- ave(SqFt, Manager, FUN = mean) rm(Category) }))
Using data.table :
library(data.table) DT <- data.table(mydf) DT[, list(Amount = sum(Amount), SqFt = mean(SqFt)), by = "Manager"]
Using "sqldf":
library(sqldf) sqldf("select Manager, sum(Amount) `Amount`, avg(SqFt) `SqFt` from mydf group by Manager")
Using aggregate and merge :
merge(aggregate(Amount ~ Manager, mydf, sum), aggregate(SqFt ~ Manager, mydf, mean))
source share