Multiple merge, better solution?
Hi, I think Reduce could help you. DF1 <- data.frame(var1 = letters[1:5], a = rnorm(5)) DF2 <- data.frame(var1 = letters[3:7], b = rnorm(5)) DF3 <- data.frame(var1 = letters[6:10], c = rnorm(5)) DF4 <- data.frame(var1 = letters[8:12], d = rnorm(5)) g <- merge(DF1, DF2, by.x="var1", by.y="var1", all=T) g <- merge(g, DF3, by.x="var1", by.y="var1", all=T) g <- merge(g, DF4, by.x="var1", by.y="var1", all=T) test <- Reduce(function(x, y) merge(x, y, all=T,by.x="var1", by.y="var1"), list(DF1, DF2, DF3, DF4), accumulate=F) all.equal(test, g) # TRUE As a warning, it's the first time I've ever used it myself... Hope this helps, baptiste
On 19 Feb 2009, at 10:21, Lauri Nikkinen wrote:
Hello, My problem is that I would like to merge multiple files with a common column but merge accepts only two data.frames to merge. In the real situation, I have 26 different data.frames with a common column. I can of course use merge many times (see below) but what would be more sophisticated solution? For loop? Any ideas? DF1 <- data.frame(var1 = letters[1:5], a = rnorm(5)) DF2 <- data.frame(var1 = letters[3:7], b = rnorm(5)) DF3 <- data.frame(var1 = letters[6:10], c = rnorm(5)) DF4 <- data.frame(var1 = letters[8:12], d = rnorm(5)) g <- merge(DF1, DF2, by.x="var1", by.y="var1", all=T) g <- merge(g, DF3, by.x="var1", by.y="var1", all=T) merge(g, DF4, by.x="var1", by.y="var1", all=T) Thanks in advance. -Lauri
______________________________________________ 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.
_____________________________ Baptiste Augui? School of Physics University of Exeter Stocker Road, Exeter, Devon, EX4 4QL, UK Phone: +44 1392 264187 http://newton.ex.ac.uk/research/emag