Pasando de SAS a R. Primer y ultimo elemento de un campo agrupado de un data frame
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 como funciona, creamos un conjunto de datos aleatorio:
id <- rpois(100,20)
mes <- rpois(100,3)+1
importe <- abs(rnorm(100))*100
df <- data.frame(cbind(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_bajo_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.