AGGREGATE

La función Aggregate (similar a group by en SQL) en R, divide los datos en subconjuntos, calcula estadísticas de resumen para cada subconjunto y devuelve el resultado en un grupo por formulario.

aggregate(campo_dataframe, lista, funcion)
# campo_dataframe: Campo del dataframe, al cual se le aplicará una función. 
# lista: Lista de campos a agrupar.
# funcion: Estadísticas de resumen que se pueden aplicar a todos los subconjuntos de datos. (sum|length|mean...)
EJEMPLO: Supongamos que se quiere obtener la suma de las ventas por país, del siguiente Dataframe:
df = data.frame("PAIS" = c("Chile","Argentina","Perú","Chile","Chile"),
           "CUIDAD" = c("Santiago","Córdoba","Lima","Santiago","Concepción"),
           "VENTAS" = c(100,100,100,100,100))
df
##        PAIS     CUIDAD VENTAS
## 1     Chile   Santiago    100
## 2 Argentina    Córdoba    100
## 3      Perú       Lima    100
## 4     Chile   Santiago    100
## 5     Chile Concepción    100

PASO 01: Debemos chequear los tipos de datos del df.
En este caso sólo necesitamos que la variable VENTAS sea numérico.

str(df)
## 'data.frame':    5 obs. of  3 variables:
##  $ PAIS  : Factor w/ 3 levels "Argentina","Chile",..: 2 1 3 2 2
##  $ CUIDAD: Factor w/ 4 levels "Concepción","Córdoba",..: 4 2 3 4 1
##  $ VENTAS: num  100 100 100 100 100

Extra: Supongamos que todos los campos son Character.

#A cada columna del df la transformamos en Character
df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)
str(df)
## 'data.frame':    5 obs. of  3 variables:
##  $ PAIS  : chr  "Chile" "Argentina" "Perú" "Chile" ...
##  $ CUIDAD: chr  "Santiago" "Córdoba" "Lima" "Santiago" ...
##  $ VENTAS: chr  "100" "100" "100" "100" ...

PASO 02: Transformar a numérico el campo VENTAS.

df$VENTAS <- as.numeric(df$VENTAS)
str(df)
## 'data.frame':    5 obs. of  3 variables:
##  $ PAIS  : chr  "Chile" "Argentina" "Perú" "Chile" ...
##  $ CUIDAD: chr  "Santiago" "Córdoba" "Lima" "Santiago" ...
##  $ VENTAS: num  100 100 100 100 100

PASO 03: Ejecutamos la función aggregate.

#aplicamos la función
salida = aggregate(df[,c("VENTAS")],by = list(PAISES = df$PAIS), FUN = sum)
#cambia el nombre 
names (salida)[2] = "SUMA_VENTAS"
#mostramos la salida
salida
##      PAISES SUMA_VENTAS
## 1 Argentina         100
## 2     Chile         300
## 3      Perú         100

Extra: Supongamos que deseamos agrupar por PAIS y CUIDAD:

#aplicamos la función
salida = aggregate(df[,c("VENTAS")],by = list(PAISES = df$PAIS,CUIDADES = df$CUIDAD),FUN = sum)
#Cambiamos el nombre de la suma
names (salida)[3] = "SUMA_VENTAS"
#mostramos la salida
salida
##      PAISES   CUIDADES SUMA_VENTAS
## 1     Chile Concepción         100
## 2 Argentina    Córdoba         100
## 3      Perú       Lima         100
## 4     Chile   Santiago         200