[R] plyr: colvar value corresponding to max Date

Ista Zahn istazahn at gmail.com
Thu Feb 13 17:38:53 CET 2014


ddply(data, "state", function(x) x[x$date == max(x$date), ])$value

On Thu, Feb 13, 2014 at 11:13 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
>
>> data[c(4, 8), "value"]
> [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
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.




More information about the R-help mailing list