Dear all,

I would like to merge two dataframes using two conditions. For example, if
I have the dataframes df1 and df2:

> (df1 <- data.frame(var1=c("a","b","d","e","g"), var2=c(25,14,53,26,84),
infodf1=c(1,1,1,1,1)))

  var1 var2 infodf1
1    a   25       1
2    b   14       1
3    d   53       1
4    e   26       1
5    g   84       1

> (df2 <- data.frame(var1=c("a", "a", "c", "d", "e", "h","i"), var3=c(10,
32, 14,55,2,53,6), var4=c(40,37, 54,70,30,98,10), infodf2=c(2,2,2,2,2,2,2)))

  var1 var3 var4 infodf2
1    a   10   40       2
2    a   32   37       2
3    c   14   54       2
4    d   55   70       2
5    e    2   30       2
6    h   53   98       2
7    i    6   10       2



I would like to obtain a new dataframe df3 merging df1 and df2 if var1(of
df1)==var1(of df2) and if var3(of df2)<=var2(of df1)<=var4(of df2).
Moreover, I would like to obtain a new data frame with all rows from df1
and df2 (i.e. full outer join:
http://www.w3schools.com/sql/sql_join_full.asp)

df3 should be:

  var1 var2 infodf1 var1 var3 var4 infodf2
1    a   25       1    a   10   40       2
2    e   26       1    e    2   30       2
3    b   14       1   NA   NA   NA      NA
4    d   53       1   NA   NA   NA      NA
5    g   84       1   NA   NA   NA      NA
6   NA   NA      NA    a   32   37       2
7   NA   NA      NA    c   14   54       2
8   NA   NA      NA    d   55   70       2
9   NA   NA      NA    h   53   98       2
10  NA   NA      NA    i    6   10       2


I cannot use "merge" because this function doesn't allow conditions.


On the other hand, I have tried to use SQL code using the package sqldf
with the follwing R syntax:

> (df3 <- sqldf("select a.*, b.* FROM df1 a, df2 b WHERE a.var1 = b.var1
AND b.var3 <= a.var2 AND a.var2 <= b.var4 ") )

  var1 var2 infodf1 var1 var3 var4 infodf2
1    a   25       1    a   10   40       2
2    e   26       1    e    2   30       2



But sqldf doesn't support the use of the option: "full outer join" option.

> (df3 <- sqldf("select a.*, b.* FROM df1 a full outer join df2 b WHERE
a.var1 = b.var1 AND b.var3 <= a.var2 AND a.var2 <= b.var4 ") )

Error in sqliteExecStatement(con, statement, bind.data) :

  RS-DBI driver: (error in statement: RIGHT and FULL OUTER JOINs are not
currently supported)


Does anyone know how I can solve my problem?

thank you very much!

Marc

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to