在R语言中按出发小时与站点分组统计出行班次总数
按出发小时和站点分组统计班次总数的解决方案
嘿,这事儿好办!我帮你整理两种常用的R语言实现方法,轻松搞定你的需求~
方法1:用dplyr包(tidyverse风格,直观易读)
这是处理这类分组统计最常用的方式,步骤清晰易懂:
- 先确保你装了dplyr包(没装的话先运行安装代码)
- 按
hour和id分组,再统计每组的记录数(也就是班次总数)
# 安装并加载dplyr包(如果还没装的话) if (!require(dplyr)) { install.packages("dplyr") library(dplyr) } # 核心分组统计代码 result <- d %>% group_by(hour, id) %>% summarise(count = n(), .groups = "drop") # 查看最终结果 print(result)
小解释:n()函数会自动计算每组的行数,也就是对应站点对应小时的出发班次;.groups = "drop"是为了让结果回到普通数据框格式,避免后续操作受分组属性影响。
方法2:用base R的xtabs()函数(无需额外装包)
如果你不想加载第三方包,用R自带的函数也能搞定,还能生成交叉表格式的结果:
# 生成交叉表,统计每个hour+id组合的班次数量 result_table <- xtabs(~ hour + id, data = d) # (可选)转换成和dplyr结果一致的数据框格式 result_df <- as.data.frame(result_table, responseName = "count") # 查看结果 print(result_df)
小解释:xtabs()会生成一个行列分别对应hour和id的交叉表,单元格值就是班次数量;转换成数据框后,格式就和你预期的完全匹配了。
用你的示例数据测试的结果
用你给出的d子集运行上面的代码,会得到这样的结果:
hour id count
1 8 101 1
2 9 101 1
3 13 101 1
4 17 102 1
5 18 101 2
完全符合你要的「每个站点每小时出发班次总数」的需求~
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

