Peter Ehlers
2011-May-16 18:17 UTC
[R] Fwd: Re: rbind with partially overlapping column names
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.