On Fri, Aug 20, 2010 at 6:44 AM, Cecilia Carmo <cecilia.ca...@ua.pt> wrote: > Hi everyone! > > I'm matching two samples to create one sample that have > pairs of observations equal for the k1 variable. Merge() doesn't work > because I dont't want to recycle the values. > > x <- data.frame(k1=c(1,1,2,3,3,5), k2=c(20,21,22,23,24,25)) > x > y <- data.frame(k1=c(1,1,2,2,3,4,5,5), k2=c(10,11,12,13,14,15,16,17)) > y > merge(x,y,by="k1") > k1 k2.x k2.y > 1 1 20 10 > 2 1 20 11 > 3 1 21 10 > 4 1 21 11 > 5 2 22 12 > 6 2 22 13 > 7 3 23 14 > 8 3 24 14 > 9 5 25 16 > 10 5 25 17 > > I have a final dataframe with 10 rows, but I want it with 5 rows, like this: > k1 k2.x k2.y > 1 1 20 10 > 2 1 21 11 > 3 2 22 12 > 4 3 23 14 > 5 5 25 16 >
Try this: x$k3 <- with(x, ave(k1, k1, FUN = seq_along)) y$k3 <- with(y, ave(k1, k1, FUN = seq_along)) merge(x, y, by = c("k1", "k3")) ______________________________________________ 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.