-1

I have a list of data like this:

      name                    Date
MANHATTAN STRIKER    (V141) 30/11/2016
MANHATTAN STRIKER    (V141) 16/11/2016
MANHATTAN STRIKER    (V141) 26/10/2016
MANHATTAN STRIKER    (V141) 28/9/2016
YOURTHEWONFORME      (T258) 30/11/2016
YOURTHEWONFORME      (T258) 9/11/2016
YOURTHEWONFORME      (T258) 26/10/2016
FOREVER FUN          (S130) 30/11/2016
FOREVER FUN          (S130) 16/11/2016
FOREVER FUN          (S130) 26/10/2016
FOREVER FUN          (S130) 12/10/2016

How to I write the script in R to just list out each name, with the latest two dates in each Date? resulting like this:

           name                   Date
    MANHATTAN STRIKER    (V141) 30/11/2016
    MANHATTAN STRIKER    (V141) 16/11/2016
    YOURTHEWONFORME      (T258) 30/11/2016
    YOURTHEWONFORME      (T258) 9/11/2016
    FOREVER FUN          (S130) 30/11/2016
    FOREVER FUN          (S130) 16/11/2016
Yuen Wa Ho
  • 63
  • 6
  • 1
    TRy `library(dplyr); df1 %>% group_by(name) %>% arrange(desc(as.Date(Date, "%d/%m/%Y"))) %>% slice(1:2)` – akrun Dec 01 '16 at 17:02
  • `dplyr::top_n` is handy: `df %>% mutate(Date = as.Date(Date, '%d/%m/%Y')) %>% group_by(name) %>% top_n(2, Date)` – alistaire Dec 01 '16 at 21:20

1 Answers1

-1

we can use dplyr. After grouping by 'name', convert the 'Date' to Date class, arrange in descending order and slice the first two rows

library(dplyr)
df1 %>%
   group_by(name) %>% 
   arrange(desc(as.Date(Date, "%d/%m/%Y"))) %>%
   slice(1:2)
akrun
  • 874,273
  • 37
  • 540
  • 662