[R] Selecting 1st and last dates from a set of dates

William Dunlap wdunlap at tibco.com
Fri Jul 15 18:46:37 CEST 2016


A problem with finding the last but 1, or the 3rd, etc., element in
a run is what to do with runs too short to have such an element.
The following 2 functions just ignore such runs, so you would probably
want to also drop the short runs from the output of isFirstInRun.

isLastButOneInRun <- function (x)
{
    L <- isLastInRun(x)
    retval <- logical(length(x))
    retval[L] <- FALSE
    retval[!L] <- isLastInRun(x[!L])
    retval
}
isLastButNInRun <- function (x, n)
{
    rev(sequence(rle(rev(x))$lengths)) == n + 1
}

There are lots of other ways to do this.



Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, Jul 15, 2016 at 2:43 AM, Mehta, Gaurang <
Gaurang.Mehta at royallondon.com> wrote:

> Hi William, on below lets say I want to arrange the data using last but 1
> day of the month, what modification would be required. I have tried the
> following but no help.
> isFirstInRun <- function(x) c(TRUE, x[-1] != x[-length(x)])
> # isLastInRun <- function(x) c(x[-1] != x[-length(x)], TRUE)
> isLastInRun <- function(x) c(x[-1] != x[-length(x)-1], TRUE)
>
> It would be great if you could help here. I think I am nearly there but
> not quite.
> Regards,
> Gaurang Mehta
> -----Original Message-----
> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of William
> Dunlap via R-help
> Sent: 14 July 2016 17:32
> To: Nordlund, Dan (DSHS/RDA)
> Cc: R-help Mailing List
> Subject: Re: [R] Selecting 1st and last dates from a set of dates
>
> I did not use aggregate because it did not make it convenient to return
> the rest of the row with the min or max data in it.
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
> On Thu, Jul 14, 2016 at 9:22 AM, Nordlund, Dan (DSHS/RDA) <
> NordlDJ at dshs.wa.gov> wrote:
>
> > Using William Dunlap's data, here is another alternative:
> >
> > library(zoo)
> > aggregate(d$Date,list(as.yearmon(d$Date)),min)
> > aggregate(d$Date,list(as.yearmon(d$Date)),max)
> >
> >
> > Hope this is helpful,
> >
> > Dan
> >
> > Daniel Nordlund, PhD
> > Research and Data Analysis Division
> > Services & Enterprise Support Administration Washington State
> > Department of Social and Health Services
> >
> >
> > > -----Original Message-----
> > > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of
> > > Mehta, Gaurang
> > > Sent: Thursday, July 14, 2016 9:01 AM
> > > To: William Dunlap
> > > Cc: R-help Mailing List
> > > Subject: Re: [R] Selecting 1st and last dates from a set of dates
> > >
> > > Thanks William.
> > > This works. Thanks again.
> > >
> > > From: William Dunlap [mailto:wdunlap at tibco.com]
> > > Sent: 14 July 2016 16:42
> > > To: Mehta, Gaurang
> > > Cc: Jeff Newmiller; R-help Mailing List
> > > Subject: Re: [R] Selecting 1st and last dates from a set of dates
> > >
> > > Does the following example help?  isFirstInRun() and isLastInRun()
> > > are
> > handy
> > > utility functions.
> > >
> > > > d <- transform(data.frame(Date=as.Date(c("2016-01-05",
> > > > "2016-03-04", "2016-03-30", "2015-12-02", "2016-03-04",
> > > > "2015-12-21"))), DaysSince1970=as.integer(Date),
> > > > I=seq_along(Date)) d
> > >         Date DaysSince1970 I
> > > 1 2016-01-05         16805 1
> > > 2 2016-03-04         16864 2
> > > 3 2016-03-30         16890 3
> > > 4 2015-12-02         16771 4
> > > 5 2016-03-04         16864 5
> > > 6 2015-12-21         16790 6
> > > > isFirstInRun <- function(x) c(TRUE, x[-1] != x[-length(x)])
> > > > isLastInRun <- function(x) c(x[-1] != x[-length(x)], TRUE) ds <-
> > > > d[order(d$Date),] ds
> > >         Date DaysSince1970 I
> > > 4 2015-12-02         16771 4
> > > 6 2015-12-21         16790 6
> > > 1 2016-01-05         16805 1
> > > 2 2016-03-04         16864 2
> > > 5 2016-03-04         16864 5
> > > 3 2016-03-30         16890 3
> > > > ds[isFirstInRun(format(ds$Date, "%Y-%m")),]
> > >         Date DaysSince1970 I
> > > 4 2015-12-02         16771 4
> > > 1 2016-01-05         16805 1
> > > 2 2016-03-04         16864 2
> > > > ds[isLastInRun(format(ds$Date, "%Y-%m")),]
> > >         Date DaysSince1970 I
> > > 6 2015-12-21         16790 6
> > > 1 2016-01-05         16805 1
> > > 3 2016-03-30         16890 3
> > >
> > >
> > > Bill Dunlap
> > > TIBCO Software
> > > wdunlap tibco.com<http://tibco.com>
> > >
> > > On Thu, Jul 14, 2016 at 8:26 AM, Mehta, Gaurang
> > > <Gaurang.Mehta at royallondon.com<mailto:Gaurang.Mehta at royallondon.c
> > > om>> wrote:
> > > Hi Jeff,
> > > I would say my problem is what you described in 2 below. My data is
> > > as
> > > follows:
> > > Date    UC11    UC12    UC13
> > > 02/01/1997      1       2       0
> > > 03/01/1997      5       6       3
> > > 06/01/1997      5       4       6
> > > 07/01/1997      6       4       3
> > > 08/01/1997      6       5       5
> > > 09/01/1997      7       6       8
> > > 10/01/1997      8       5       5
> > > 13/01/1997      8       6       5
> > > 14/01/1997      7       4       4
> > > 15/01/1997      6       3       3
> > > 16/01/1997      8       5       5
> > > 17/01/1997      6       4       3
> > > 20/01/1997      5       4       2
> > > 21/01/1997      7       5       5
> > > 22/01/1997      16      12      12
> > > 23/01/1997      5       3       4
> > > 24/01/1997      5       2       2
> > > 27/01/1997      8       4       5
> > > 28/01/1997      7       5       9
> > > 29/01/1997      4       4       4
> > > 30/01/1997      4       4       6
> > > 31/01/1997      9       7       8
> > > 03/02/1997      9       6       8
> > >
> > >
> > > I want to select the data on the first date it can be 1st , 2nd or
> > > 3rd
> > or any and
> > > last date it can be 31st, 30th and /or29th. I don’t need time.
> > > It would be great if you could help.
> > > Regards,
> > > Gaurang Mehta
> > >
> > >
> > >
> > > -----Original Message-----
> > > From: Jeff Newmiller
> > > [mailto:jdnewmil at dcn.davis.ca.us<mailto:jdnewmil at dcn.davis.ca.us>]
> > > Sent: 14 July 2016 16:03
> > > To: Mehta, Gaurang; R-help Mailing List
> > > Subject: Re: [R] Selecting 1st and last dates from a set of dates
> > >
> > > I suspect the answer to your question (is there a function...) is
> > > almost certainly yes, but your question is too vague to be sure.
> > >
> > > 1) Data frames and matrices are different in important ways... it is
> > highly
> > > unlikely that matrices would be appropriate for date data.
> > >
> > > 2) Do you mean "select records with earliest date in each month" or
> > "select
> > > records whose day of month is 1"? If you need to work with time of
> > > day along with date then the solution will be different than if you
> > > are
> > working
> > > with date only.
> > >
> > > 3) Have you converted your dates to Date or POSIXct or chron already?
> > > Which?
> > >
> > > 4) There are a lot of useful functions in base R [1][2], as well as
> > contributed
> > > packages such as chron and lubridate.
> > >
> > > A reproducible example [3] is the standard way to communicate what
> > > problem you actually have.  In particular, including the output of
> > > dput
> > for a
> > > representative sample of data is a key element of that example.
> > >
> > > [1] ?DateTimeClasses
> > > [2] R News 4/1 p29
> > > [3]
> > > http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-
> > > reproducible-example
> > > --
> > > Sent from my phone. Please excuse my brevity.
> > >
> > > On July 14, 2016 5:44:52 AM PDT, "Mehta, Gaurang"
> > > <Gaurang.Mehta at royallondon.com<mailto:Gaurang.Mehta at royallondon.c
> > > om>> wrote:
> > > >Hi Team,
> > > >I am struggling to select the first date and last date of the month
> > > >where there is data in a dataframe/matrix.
> > > >Is there any r function that can help to easily select data on the
> > > >first and last day of the month from the given set of dates and
> values.
> > > >Thanks for the help in advance.
> > > >Regards,
> > > >Gaurang
> > > >
> > > >
> > > >This email is intended for the person or company named and access
> > > >by anyone else is unauthorised. If you are not the person or
> > > >company named, please delete this email and notify the sender.
> > > >
> > > >The information in this email, including any attachments, may be
> > > >confidential or legally privileged (meaning that its disclosure is
> > > >protected in law). Its unauthorised disclosure, copying,
> > > >distribution or use is prohibited and may be unlawful.
> > > >
> > > >Email communications sent over the internet are not guaranteed to
> > > >be secure or virus-free and such messages are potentially at risk.
> > > >The Royal London Group accepts no liability for any claims arising
> > > >from use of the internet to transmit messages by or to any company
> > > >within the Royal London Group.
> > > >
> > > >The Royal London Group consists of The Royal London Mutual
> > > >Insurance Society Limited and its subsidiaries.
> > > >
> > > >The Royal London Mutual Insurance Society Limited is authorised by
> > > >the Prudential Regulation Authority and regulated by the Financial
> > > >Conduct Authority and the Prudential Regulation Authority and
> > > >provides life assurance and pensions.
> > > >
> > > >Registered in England and Wales number 99064.
> > > >
> > > >Registered office: 55 Gracechurch Street, London, EC3V 0RL.
> > > >
> > > >In the Republic of Ireland: The Royal London Mutual Insurance
> > > >Society Limited is authorised by the Prudential Regulation
> > > >Authority in the UK and is regulated by the Central Bank of Ireland
> > > >for conduct of business rules.
> > > >
> > > >
> > > >       [[alternative HTML version deleted]]
> > > >
> > > >______________________________________________
> > > >R-help at r-project.org<mailto:R-help at 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 at r-project.org<mailto:R-help at 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.
> > >
> > >
> > >       [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help at 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 at 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.
> >
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list