[R] Impossible to merge with a zero rows data frame?

Petr Pikal petr.pikal at precheza.cz
Wed Sep 27 15:41:12 CEST 2006


Hi

you have two options:

change the source code for merge 
or use some modified function like

my.merge <- function(x,y, ...) if(all(dim(x)[1]>0, dim(y)[1]>0)) 
merge(x,y) else print ("No merge or whatever action which is 
suitable")

HTH
Petr

On 27 Sep 2006 at 11:55, Bonfigli Sandro wrote:

Date sent:      	Wed, 27 Sep 2006 11:55:44 +0200
From:           	"Bonfigli Sandro" <bonfigli at inmi.it>
To:             	r-help at stat.math.ethz.ch
Subject:        	[R] Impossible to merge with a zero rows data frame?

> I'm trying to merge two data frames. One of them is a zero rows data
> frame. I'm using the merge parameter 'all.x = TRUE' so I'd expect to
> obtain all the rows of x. In fact the merge help says:
> 
> all.x: logical; if 'TRUE', then extra rows will be added to the
>           output, one for each row in 'x' that has no matching row in
>           'y'.  These rows will have 'NA's in those columns that are
>           usually filled with values from 'y'.
> 
> To let you test the problem here is some code:
> 
> > L3 <- LETTERS[1:3]
> > (d <- data.frame(cbind(x=1, y=1), fac=sample(L3, 1, repl=TRUE))) e
> > <- d[-1,]
> 
> so now we have that:
> > e
> [1] x   y   fac
> <0 rows> (or 0-length row.names)
> 
> here is the merge:
> > merge(d, e, by.x = c("x"), by.y = c("x"), all.x = TRUE)
> 
> I'd expect something like:
>   x y.x fac.x y.y fac.y
> 1 1   1     B  NA    NA
> instead of:
> Error in merge.data.frame(d, e, by.x = c("x"), by.y = c("x"), all.x =
> TRUE) : 
>         no row to correspond
> (I'm traslating the error message, so it could be a little different)
> 
> My questions are:
> Is there a way to obtain my desired result? In the context in which
> I'd like to use the code the second data frame is the result of a
> query and a lot of overwork would be added if I have to check if the
> dataframe is a zero rows one BEFORE the merge (in fact I do a sequence
> of several merge) Is this behaviour of the merge command correct? Why
> did the developers choose it?
> 
> P.S.: I tested this code both in R 2.3.0 and in 2.3.1
> 
> Thank you in advance.
>    Sandro Bonfigli
> 
> ______________________________________________
> R-help at stat.math.ethz.ch 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.

Petr Pikal
petr.pikal at precheza.cz



More information about the R-help mailing list