如何在 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 %>% tbl("flights") %>% filter(dest == "HNL") %>% mutate(n = n()) %>% select(n) %>% explain()
explain 返回的 SQL 又好又短:SELECT COUNT() AS "n" FROM "flights" WHERE "dest" = 'HNL'
或%>% summarize(n())
来自***.com/questions/37351315/…以上是关于如何在 dplyr 中使用 SQL count(*)?的主要内容,如果未能解决你的问题,请参考以下文章
使用 count()、aggregate()、data.table() 或 dplyr() 汇总数据(均值、标准差)