Here is one way. Sort the data.frame, first by Name then break ties with CheckInDate. Then choose the rows that are the last in a run of identical Name values.
> txt <- "Name CheckInDate Temp + John 1/3/2014 97 + Mary 1/3/2014 98.1 + Sam 1/4/2014 97.5 + John 1/4/2014 99" > d <- read.table(header=TRUE, colClasses=c("character","character","numeric"), text=txt) > d$CheckInDate <- as.Date(d$CheckInDate, as.Date, format="%d/%m/%Y") > isEndOfRun <- function(x) c(x[-1] != x[-length(x)], TRUE) > dSorted <- d[order(d$Name, d$CheckInDate), ] > dLatestVisit <- dSorted[isEndOfRun(dSorted$Name), ] > dLatestVisit Name CheckInDate Temp 4 John 2014-04-01 99.0 2 Mary 2014-03-01 98.1 3 Sam 2014-04-01 97.5 Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, Jan 23, 2015 at 3:43 PM, Tan, Richard <r...@panagora.com> wrote: > Hi, > > Can someone help for a R question? > > I have a data set like: > > Name CheckInDate Temp > John 1/3/2014 97 > Mary 1/3/2014 98.1 > Sam 1/4/2014 97.5 > John 1/4/2014 99 > > I'd like to return a dataset that for each Name, get the row that is the > latest CheckInDate for that person. For the example above it would be > > Name CheckInDate Temp > John 1/4/2014 99 > Mary 1/3/2014 98.1 > Sam 1/4/2014 97.5 > > > Thank you for your help! > > Richard > > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. > [[alternative HTML version deleted]] ______________________________________________ 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.