在R语言中使用dplyr实现分组计数的方法咨询
用dplyr实现类似MySQL的分组计数
没问题!用dplyr完成你要的分组统计行数(类似MySQL的GROUP BY + COUNT(*))其实非常简单,核心就是两个关键步骤:指定分组变量,再统计每组的行数。我结合NASA HTTP请求数据集的场景给你举几个实用例子:
最简洁的方式:直接用count()
count()是dplyr专门用来做分组计数的快捷函数,它会自动帮你完成分组+统计的操作,代码比MySQL还简洁:
假设你的NASA数据集叫nasa_http_data,如果你想统计不同请求路径(比如request列)的请求次数,代码如下:
library(dplyr) # 按request列分组,统计每组行数 nasa_http_data %>% count(request)
这完全等价于MySQL里的:
SELECT request, COUNT(*) FROM nasa_http_data GROUP BY request;
如果想按计数结果从高到低排序,只要加个sort = TRUE参数就行:
nasa_http_data %>% count(request, sort = TRUE)
更灵活的方式:group_by() + summarize()
如果你需要在分组后做更多操作(比如同时计算其他统计量),可以用group_by()先指定分组变量,再用summarize()配合n()函数统计行数:
nasa_http_data %>% group_by(host) # 按请求主机(host列)分组 %>% summarize( request_count = n(), # 统计每组的请求次数 earliest_request = min(time) # 顺便统计该主机最早的请求时间(示例扩展操作) )
这里的n()函数就是dplyr里用来统计当前分组行数的工具,和MySQL里的COUNT(*)作用一致。
多列分组的情况
如果需要按多个维度分组(比如同时按host和request),两种方式都支持:
# 用count()的多列分组 nasa_http_data %>% count(host, request) # 用group_by()+summarize()的多列分组 nasa_http_data %>% group_by(host, request) %>% summarize(total = n())
简单总结下:group_by()就是用来告诉dplyr“我要按哪几列分组”的关键函数,之后的所有操作都会基于每个分组独立执行,搭配n()或者count()就能轻松实现你要的分组计数效果啦!
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

