Las personas que están acostumbradas a trabajar con SAS emplean mucho los elementos FIRST., LAST. y BY; en el blog hay ejemplos al respecto. En R podemos hacer este trabajo con la librería “estrella” dplyr de un modo relativamente sencillo. A continuación se presenta un ejemplo para entender mejor cómo funciona; creamos un conjunto de datos aleatorio:

id <- rpois(100, 20)
mes <- rpois(100, 3) + 1
importe <- abs(rnorm(100)) * 100

df <- data.frame(id, mes, importe)

Tenemos un identificador, una variable mes y un importe y deseamos obtener el menor importe por mes. El primer paso a realizar es ordenar el data frame de R por ese identificador, el mes y el importe en orden descendente:

df <- df[with(df, order(id, mes, -importe)), ]

Una vez ordenado el data frame de R tenemos que seleccionar el último elemento por id para seleccionar aquellos clientes con menor importe:

library(dplyr)
df_bajo_importe <- df %>% group_by(id) %>% filter(row_number() == n())

Si deseamos seleccionar el mayor importe hacemos lo mismo:

library(dplyr)
df_alto_importe <- df %>% group_by(id) %>% filter(row_number() == 1)

Las funciones group_by unidas a filter(row_number()) equivalen a esos FIRST. y LAST. de SAS. Saludos.