4

我的目标是获取“matr”,按 c1 列对其进行排序,并在 c2 = 1 时保持唯一(c1)。例如,从这段代码中......

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
4

1 回答 1

5

你想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>
于 2013-05-30T22:45:22.203 回答