Hi,
Try ?which.max() # unique values for the combination.
ddply(data,.(state),summarize,max_date=value[which.max(date)])[,2]
#or
ddply(data,.(state),summarize,max_date=value[date == max(date)])[,2]
A.K.
On Thursday, February 13, 2014 11:15 AM, Dan Murphy <chiefmurphy at gmail.com> wrote:
I can do this in multiple steps with summarise, joins, etc., but can't
help thinking it can be accomplished in one plyr call.
Here's a small example:
require(plyr)
require(lubridate)
data <- data.frame(
+ date = rep(as.Date(ymd(20140101 + (0:3) * 100)), 2),
+ state = rep(c("A", "B"), each = 4),
+ value = rnorm(8))
What I want is clearly
[1] -1.007111 -1.527541
Here are my multiple steps:
statemaxval <- ddply(data, "state", summarise, max_date = max(date))
rslt <- join(data, statemaxval, by = "state")
rslt <- subset(rslt, date == max_date)
rslt <- rslt[!duplicated(rslt), ]
rslt$value
[1] -1.007111 -1.527541
Is there a one-step way to accomplish this?
Something like
ddply(data, "state", summarise, "GiveMeTheValueCorrespondingToMaxDateByState!!")
Or is that only possible if there is only one unique value for a given
combination of state and max(date)?
Thanks,
Dan