[R] Fwd: Re: rbind with partially overlapping column names

Peter Ehlers ehlers at ucalgary.ca
Mon May 16 20:17:42 CEST 2011


I had meant to copy the list on this; must have hit 'Reply'
instead of 'Reply All'.

P Ehlers

-------- Original Message --------
Subject: Re: [R] rbind with partially overlapping column names
Date: Mon, 16 May 2011 11:14:11 -0600
From: Peter Ehlers <ehlers at ucalgary.ca>
To: Jonathan Flowers <jonathanmflowers at gmail.com>

On 2011-05-16 08:56, Jonathan Flowers wrote:
> Hi all,
>
> Thanks for your responses.  The merge output works for the test case as Bill
> pointed out, but is contingent on non-overlapping values.  Thanks for
> pointing this out Ian.  My actual dataset needs to allow for overlapping
> values (sorry for the poor test case) so I will cook up something like Ian
> and Dennis suggested.

For what it's worth, you could always augment your dataframes
with non-overlapping variables and then William's merge(all=TRUE,...)
will work:

    df1$w <- 1:nrow(df1)
    df2$w <- 1:nrow(df2) + nrow(df1)
    df3 <- merge(df1, df2, all=TRUE)[c("a","b","c")]

Peter Ehlers

>
> Thanks again.
>
> Jonathan
>
> On Mon, May 16, 2011 at 12:28 AM, Ian Gow<iandgow at gmail.com>  wrote:
>
>> That approach relies on df1 and df2 not having overlapping values in b.
>> Slight variation in df2 gives different results:
>>
>>> df1<- data.frame(a=c("A","A"),b=c("B","B"))
>>> df2<- data.frame(b=c("B","B"),c=c("c","c"))
>>> merge(df1,df2,all=TRUE)
>>   b a c
>> 1 B A c
>> 2 B A c
>> 3 B A c
>> 4 B A c
>>
>>
>> On 5/15/11 11:19 PM, "William Dunlap"<wdunlap at tibco.com>  wrote:
>>
>>>
>>>> -----Original Message-----
>>>> From: r-help-bounces at r-project.org
>>>> [mailto:r-help-bounces at r-project.org] On Behalf Of Jonathan Flowers
>>>> Sent: Sunday, May 15, 2011 5:41 PM
>>>> To: r-help at r-project.org
>>>> Subject: [R] rbind with partially overlapping column names
>>>>
>>>> Hello,
>>>>
>>>> I would like to merge two data frames with partially
>>>> overlapping column
>>>> names with an rbind-like operation.
>>>>
>>>> For the follow data frames,
>>>>
>>>> df1<- data.frame(a=c("A","A"),b=c("B","B"))
>>>> df2<- data.frame(b=c("b","b"),c=c("c","c"))
>>>>
>>>> I would like the output frame to be (with NAs where the frames don't
>>>> overlap)
>>>>
>>>> a      b     c
>>>> A     B     NA
>>>> A     B     NA
>>>> NA   b     c
>>>> NA   b     c
>>>>
>>>> I am familiar with ?merge and ?rbind, but neither seem to
>>>> offer a means to
>>>> accomplish this.
>>>
>>> What is wrong with merge(all=TRUE,...)?
>>>   >  merge(df1,df2,all=TRUE)
>>>     b    a    c
>>>   1 B    A<NA>
>>>   2 B    A<NA>
>>>   3 b<NA>     c
>>>   4 b<NA>     c
>>> Rearrange the columns if that is necessary
>>>   >  merge(df1,df2,all=TRUE)[c("a","b","c")]
>>>        a b    c
>>>   1    A B<NA>
>>>   2    A B<NA>
>>>   3<NA>  b    c
>>>   4<NA>  b    c
>>>
>>> Bill Dunlap
>>> Spotfire, TIBCO Software
>>> wdunlap tibco.com
>>>>
>>>> Thanks in advance.
>>>>
>>>> Jonathan
>>>>
>>>>       [[alternative HTML version deleted]]
>>>>
>>>> ______________________________________________
>>>> 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.
>>>>
>>>
>>> ______________________________________________
>>> 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.
>>
>>
>>
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> 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.



More information about the R-help mailing list