Hello,

Here is a dplyr solution. arrange() sorts by name and desc(ddate) and top_n keeps the first 2 after grouping by ddate. Then it's a matter of being careful with diff() in the summarise instruction.


library(dplyr)

DF1 %>%
  mutate(ddate = as.Date(ddate)) %>%
  arrange(name, desc(ddate)) %>%
  group_by(name) %>%
  top_n(2) %>%
  summarise(diff = ifelse(n() > 1, diff(rev(ddate)), 0))
#Selecting by ddate
## A tibble: 3 x 2
#  name   diff
#  <chr> <dbl>
#1 A        76
#2 B       305
#3 c         0


Hope this helps,

Rui Barradas

Às 03:58 de 15/05/20, Val escreveu:
HI All,
I have a sample of data frame
DF1<-read.table(text="name ddate
   A  2019-10-28
   A  2018-01-25
   A  2020-01-12
   A  2017-10-20
   B  2020-11-20
   B  2019-10-20
   B  2017-05-20
   B  2020-01-20
   c  2009-10-01  ",header=TRUE)

1. I want sort by name and ddate on decreasing order and the output
should like as follow
    A  2020-01-12
    A  2019-01-12
    A  2018-01-25
    A  2017-10-20
    B  2020-11-21
   B  2020-11-01
   B  2019-10-20
   B  2017-05-20
   c  2009-10-01

2.  Take the top two rows by group( names) and the out put should like
    A  2020-01-12
    A  2019-01-12
    B  2020-11-21
    B  2020-11-01
     c  2009-10-01

3.  Within each group (name) get the date difference  between the
first and second rows dates. If a group has only one row then the
difference should be 0

The final out put is
Name diff
    A  365
     B  20
     C  0

Here is my attempt and have an issue at the sorting
DF1$DTime <- as.POSIXct(DF1$ddate , format = "%Y-%m-%d")
DF2 <- DF1[order(DF1$name, ((as.Date(DF1$DTime, decreasing = TRUE)))), ]

not working
Any help?

Thank you

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to