[R] Merging data frames one of which is NULL

Dimitri Liakhovitski dimitri.liakhovitski at gmail.com
Tue Nov 9 18:39:36 CET 2010


Thanks a lot, Phil.
I decided to do it via the list - as you suggested, but had to do some
gymnastics, which Reduce will greatly help me to avoid now!
Dimitri

On Tue, Nov 9, 2010 at 12:36 PM, Phil Spector <spector at stat.berkeley.edu> wrote:
> Dimitri -
>   Usually the easiest way to solve problems like this
> is to put all the dataframes in a list, and then use
> the Reduce() function to merge them all together at the
> end.  You don't give many details about how the data frames
> are constructed, so it's hard to be specific about the
> best way to put them in a list, but this short example should give you an
> idea of what I'm talking about:
>
>> x<-data.frame(a=1,b=2,c=3)
>> y<-data.frame(a=10,b=20,d=30)
>> z<-data.frame(a=12,b=19,f=25)
>> a<-data.frame(a=9,b=10,g=15)
>> Reduce(function(x,y)merge(x,y,all=TRUE),list(x,y,z,a))
>
>   a  b  c  d  f  g
> 1  1  2  3 NA NA NA
> 2  9 10 NA NA NA 15
> 3 10 20 NA 30 NA NA
> 4 12 19 NA NA 25 NA
>
> Hope this helps.
>                                        - Phil Spector
>                                         Statistical Computing Facility
>                                         Department of Statistics
>                                         UC Berkeley
>                                         spector at stat.berkeley.edu
>
>
>
>
>
> On Tue, 9 Nov 2010, Dimitri Liakhovitski wrote:
>
>> Hello!
>>
>> I am running a loop. The result of each run of the loop is a data
>> frame. I am merging all the data frames.
>> For exampe:
>>
>> The dataframe from run 1:
>> x<-data.frame(a=1,b=2,c=3)
>>
>> The dataframe from run 2:
>> y<-data.frame(a=10,b=20,d=30)
>>
>> What I want to get is:
>> merge(x,y,all.x=T,all.y=T)
>>
>> Then I want to merge it with the output of the 3rd run, etc.
>>
>> Unfortunately, I can't create the placeholder for the overall resutls
>> BEFORE I run the loop because I don't even know how many columns I'll
>> end up with - after merging all the data frames.
>> I was thinking of creating an empty list:
>>
>> first<-NULL
>>
>> ...and then updating it during each run by merging it with the data
>> frame that is the output of the run. However, when I try to merge the
>> empty list with any non-empty data frame - it ends up empty:
>> merge(first,a,,all.x=T,all.y=T)
>>
>> Is there a way to make it merge while keeping everything?
>> Thanks a lot!
>> --
>> Dimitri Liakhovitski
>> Ninah Consulting
>> www.ninah.com
>>
>> ______________________________________________
>> 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.
>>
>



-- 
Dimitri Liakhovitski
Ninah Consulting
www.ninah.com



More information about the R-help mailing list