Estoy usando R para crear una tabla con datos de otra tabla y estoy trabajando con las siguientes variables:

-PRODUCT ID 
-CLASIFICATION
-DATE

Por ejemplo mi tabla de origen:

product id   Clasification   Date
10000567        B+         12-12-2020
10000123        C+         26-11-2020
10000567        A+         02-11-2020
10000222        A+         09-10-2020
10000123        B++        21-09-2020
10000222        A++        10-09-2020

La cuestión es que necesito obtener la clasificación más reciente para la identificación de mis productos porque es un campo dinámico y puede cambiar siempre. Una fila para la identificación del producto.

Cualquier ayuda será genial.

¡Gracias!

2
Diego Gonzalez Avalos 21 jul. 2020 a las 21:33

2 respuestas

La mejor respuesta

Puede usar top_n() en dplyr.

df %>%
  mutate(Date = as.Date(Date, "%d-%m-%Y")) %>%
  group_by(product_id) %>%
  top_n(1, Date) %>%
  ungroup()

# # A tibble: 3 x 3
#   product_id Clasification Date      
#        <int> <chr>         <date>    
# 1   10000567 B+            2020-12-12
# 2   10000123 C+            2020-11-26
# 3   10000222 A+            2020-10-09

Datos

df <- structure(list(product_id = c(10000567L, 10000123L, 10000567L, 
10000222L, 10000123L, 10000222L), Clasification = c("B+", "C+", 
"A+", "A+", "B++", "A++"), Date = c("12-12-2020", "26-11-2020", 
"02-11-2020", "09-10-2020", "21-09-2020", "10-09-2020")), class = "data.frame", row.names = c(NA, -6L))
1
Darren Tsai 21 jul. 2020 a las 19:10

Suponiendo que sus fechas no estén ordenadas, algo como lo siguiente debería funcionar:

library(dplyr)
df %>%
 arrange(desc(Date)) %>%
 group_by(id) %>%
 slice(1) %>%
 ungroup()
-1
Robert Wilson 21 jul. 2020 a las 19:12