如何在 dplyr 中使用 SQL count(*)?

Posted

技术标签:

【中文标题】如何在 dplyr 中使用 SQL count(*)?【英文标题】:How to use SQL count(*) with dplyr? 【发布时间】:2015-09-09 15:42:15 【问题描述】:

dplyr database vignette 解释:

“任何 dplyr 不知道如何转换的函数都保持原样 - 这意味着如果你想使用数据库提供的任何其他函数,你可以按原样使用它。”

使用与小插图中相同的示例,航班数据集:

library(nycflights13)
my_db <- src_sqlite("my_db.sqlite3", create = T)
flights_sqlite <- copy_to(my_db, flights, temporary = FALSE, indexes = list(
c("year", "month", "day"), "carrier", "tailnum"))

我设法在 tbl() 创建语句中使用了 count():

tbl(my_db, sql("SELECT count(*) FROM flights"))

但这显然只返回整个表的计数,而不是其他列,我如何在过滤操作后使用 SQL count()?

假设我要统计飞往檀香山的航班数量,并希望dplyr::explain() 返回相应的 SQL 查询。

tbl(my_db, "flights") %>% filter(dest == "HNL") %>% explain()

描述返回火奴鲁鲁航班所有数据的 SQL 语句。如何只计算这些航班?

【问题讨论】:

你想要的输出是什么? 如果你想要所有其他的列也许tbl(my_db, sql("SELECT *, count(*) FROM flights"))? 所需的输出是特定目的地的航班数量。真正需要的输出是实现此目的的 SQL 语句。 【参考方案1】:

怎么样

my_db %>% tbl("flights") %>% mutate( n = n())

【讨论】:

感谢它在过滤器后也可以工作; my_db %&gt;% tbl("flights") %&gt;% filter(dest == "HNL") %&gt;% mutate(n = n()) %&gt;% select(n) %&gt;% explain()explain 返回的 SQL 又好又短:SELECT COUNT() AS "n" FROM "flights" WHERE "dest" = 'HNL' %&gt;% summarize(n()) 来自***.com/questions/37351315/…

以上是关于如何在 dplyr 中使用 SQL count(*)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 dplyr 中使用参数化 SQL?

带有`dplyr::count()`的标准评估[重复]

在 dplyr (R) 中添加“count where”

使用 count()、aggregate()、data.table() 或 dplyr() 汇总数据(均值、标准差)

如何通过使用 dplyr 或其他包在 R 中具有最小值和最大值的查询来实现组?

无法使用 R dplyr 在旧版 SQL 查询中引用 SQL 视图