see I have a data.frame like this:

str(veh)
$VEHAGE  int  3 6 35 35 5 3 7 4 5 1 ...
$VEHTYPE int  2 1 3 1 2 3 1 4 2 3 ...

then I run

a<-sqldf("SELECT VEHAGE, COUNT(VEHAGE) as count1
                             FROM veh 
                             WHERE VEHTYPE==1
                             GROUP BY VEHAGE")


a<-sqldf("SELECT VEHAGE, COUNT(VEHAGE) as count234
                             FROM veh 
                             WHERE VEHTYPE==2|3|4
                             GROUP BY VEHAGE")

I get a result like this

head(a)
  VEHAGE count234
1     -9     92
2      1     79
3      2    164
4      3    212
5      4    260
6      5    199

I lost count1 in this case. But I want a head(a) like this

  VEHAGE count1   count234
1     -9     92    510
2      1     79    844
3      2    164    123
4      3    212    123
5      4    260    100
6      5    199    100

Any Idea? Thanks in advance!

有帮助吗?

解决方案

I suppose you're looking for this:

# first query
a <- sqldf("SELECT VEHAGE, COUNT(VEHAGE) as count1
                             FROM veh 
                             WHERE VEHTYPE==1
                             GROUP BY VEHAGE")

# second query
b <- sqldf("SELECT VEHAGE, COUNT(VEHAGE) as count234
                             FROM veh 
                             WHERE VEHTYPE IN (2, 3, 4)
                             GROUP BY VEHAGE")

# combine
a <- sqldf("SELECT * 
            FROM a JOIN b
            USING (VEHAGE)")

其他提示

Try something like:

a<-sqldf(
 "SELECT VEHAGE, 
    SUM(if(VEHTYPE==1, 1, 0)) as count1,
    SUM(if(VEHTYPE==2|3|4, 1, 0)) as count234
  FROM veh 
  GROUP BY VEHAGE")

Though disclaimer, I'm not familiar with sqldf syntax, but something like this would work in MySQL (though in MySQL ==2|3|4 would have to be in(2, 3, 4)).

Also, you may want to add something like HAVING count1 | count234 to get rid of the VEHAGEs with no vehicles in those categories.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top