0

看到我有一个这样的data.frame:

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 ...

然后我跑

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")

我得到这样的结果

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

在这种情况下,我失去了 count1。但我想要一个这样的头(a)

  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

任何想法?提前致谢!

4

2 回答 2

2

我想你正在寻找这个:

# 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)")
于 2014-02-14T19:21:34.083 回答
0

尝试类似:

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")

尽管免责声明,我不熟悉sqldf语法,但这样的东西可以在 MySQL 中工作(尽管在 MySQL==2|3|4中必须是in(2, 3, 4))。

此外,您可能想要添加一些内容,例如HAVING count1 | count234摆脱VEHAGE那些类别中没有车辆的 s。

于 2014-02-14T19:23:15.940 回答