Левое соединение SQLDF в R

Моя цель - взять 'matr', отсортировать его по столбцу c1 и оставить уникальным (c1), где c2 = 1. Например, из этого кода ...

c1 = c("a",'a','a','b','b','b','b','c','c')
c2 = c(1,1,0,1,1,0,1,0,0)
matr = as.data.frame(cbind(c1,c2))    
one = sqldf('select distinct(c1),c2 from matr where c2 = 1')    
vs = sqldf('select distinct(c1),c0,c2 from matr group by c1')
sqldf('select matr.*,one.* from matr 
  left outer join one 
  where one.c1 = matr.c1')

прибыть в:

c1 c2
a  1
b  1
c  0

По какой-то причине я теряю строку c в левом соединении. Я могу только прийти (через другие присоединения)

c1 c2
a  1
b  1

person Bryan    schedule 29.05.2013    source источник


Ответы (1)


Вы хотите on, а не where в последнем выражении sql. С where он выполняет соединение, а затем применяет предложение where, тогда как с on он выполняет соединение относительно условия on.

> sqldf('select matr.*, one.* from matr left outer join one on one.c1 = matr.c1')
  c1 c2   c1   c2
1  a  1    a    1
2  a  1    a    1
3  a  0    a    1
4  b  1    b    1
5  b  1    b    1
6  b  0    b    1
7  b  1    b    1
8  c  0 <NA> <NA>
9  c  0 <NA> <NA>
person G. Grothendieck    schedule 30.05.2013
comment
Спасибо за ваш ответ! Это помогло мне решить проблему, с которой я боролся. - person Gyan Veda; 17.12.2013