Hi,
On Wed, Feb 9, 2011 at 11:18 PM, Benjamin Caldwell
<btcaldwell at berkeley.edu> wrote:> So I needed to merge 17 .csv files, and did so by brute force, but I might
> need to do so again. Anyone have suggestions for a for loop that might do
> the below for me (where a:r are separate .csv files)
>
> ab<-merge(a,b,all=TRUE)
> cd<-merge(c,d,all=TRUE)
> ef<-merge(e,f,all=TRUE)
> gh<-merge(g,h,all=TRUE)
> ij<-merge(i,j,all=TRUE)
> kl<-merge(k,l,all=TRUE)
> no<-merge(m,n,all=TRUE)
> pq<-merge(p,q,all=TRUE)
> abcd<-merge(ab,cd,all=TRUE)
> efgh<-merge(ef,gh,all=TRUE)
> ijkl<-merge(ij,kl,all=TRUE)
> nopq<-merge(no,pq,all=TRUE)
> ah<-merge(abcd,efgh,all=TRUE)
> iq<-merge(ijkl,nopq,all=TRUE)
> aq<-merge(ah,iq,all=TRUE)
> all<-merge(aq,r,all=TRUE)
>
> write.csv(all,file="all.merged.csv")
Imagine you had the names of the csv's in a vector named `files`.
Perhaps something along these lines would work:
R> mergef <- function(x, y) merge(x, y, all=TRUE)
R> dfs <- lapply(files, read.csv)
R> all.dfs <- Reduce(mergef, dfs)
Haven't tested it, but maybe you can give it a whirl and tweak it some
until it works.
--
Steve Lianoglou
Graduate Student: Computational Systems Biology
?| Memorial Sloan-Kettering Cancer Center
?| Weill Medical College of Cornell University
Contact Info: http://cbio.mskcc.org/~lianos/contact