Pasando de SAS a R. Primer y ultimo elemento de un campo agrupado de un data frame

19 Oct

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.

Una respuesta a «Pasando de SAS a R. Primer y ultimo elemento de un campo agrupado de un data frame»

  1. Buenas ! me encuentro en la situación inversa, pasando de R a SAS y se me complica, tengo que crear en un dataset de 600 observaciones nueva variables usando los parámetros que tengo en otro dataset.
    En R puedo llamarlos usando la asignación dataset$nombrevariable ¿hay en SAS algo similar?
    Si uno los dos dataset, solo me calcula la nueva variable para la primera observación (ya que en las celdas están los valores de los parámetros que uni con MERGE)
    Muchas gracias por su ayuda

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *