Why not merge on ID, then delete the rows that don't match your second criterion? Seems easier than trying to do it in one step.
Sarah On Mon, Jul 20, 2009 at 3:07 PM, tathta<caitlyn.pa...@gmail.com> wrote: > > I would like to merge two dataframes, but i have a condition that needs to > used for the merge as well. > > the rows (observations) in each dataframe are identified by each person's ID > and by the date of the observation. > Basically I would like it to be merged based on both ID (exact match) and > date (a condition where one dataframe's date must be after the other > dataframe's date). > > > below I've given some sample dataframes to work with, described my > mysterious function, and constructed my ideas output. > > > #setting up my sample dataframes > dateA <- > as.Date(c("13/01/2001","14/02/2005","17/01/2005","27/06/2006"),"%d/%m/%Y") > dateB <- > as.Date(c("22/11/2002","13/02/2005","18/08/2005","18/01/2006","21/08/2007","21/04/2009","17/05/2009","17/05/2009"),"%d/%m/%Y") > dataA <- data.frame(id=c("A","B","C","B"),date=dateA, x=11:14,y=5:2) > dataB <- > data.frame(id=c("B","A","B","C","B","C","D","B"),date=dateB,m=27:20,n=22:29) > > > #mystery function, something like: > # data.merged <- merge(dataB,dataA,by.y=(id and date, where dataB's date > > dataA's date), all.x=TRUE) > > > #ideal final product would look like the dataframe created by the following > 5 lines > data.merged <- dataB[order(dataB$id),] > names(data.merged) <- c("id","date.b","m","n") > data.merged$date.a <- > as.Date(c("13/01/2001","14/02/2005","14/02/2005","27/06/2006","27/06/2006","17/01/2005","17/01/2005",NA),"%d/%m/%Y") > data.merged$x <- c(11,12,12,14,14,13,13,NA) > data.merged$y <- c(5,4,4,2,2,3,3,NA) > > > -- Sarah Goslee http://www.functionaldiversity.org ______________________________________________ R-help@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.