You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R的数据框操作按小时统计成功通话次数?

R语言按小时统计成功通话次数

核心需求

筛选出通话时长非空的成功通话记录,按[0,1)、[1,2)、[2,3)等小时区间分组,统计每个区间内的通话数量。


方法一:基础R实现

假设你的数据集存储在名为calls的数据框中,列名分别为Call_No(呼叫编号)、Arrival_Time(到达时间)、Call_Length(通话时长):

# 1. 筛选成功通话:排除通话时长为空的记录
successful_calls <- calls[!is.na(calls$Call_Length), ]

# 2. 生成小时区间标签
# 自动生成覆盖所有到达时间的区间断点
max_hour <- ceiling(max(successful_calls$Arrival_Time))
breaks <- seq(0, max_hour, 1)
successful_calls$Hour_Interval <- cut(
  successful_calls$Arrival_Time,
  breaks = breaks,
  include.lowest = TRUE,  # 确保0被包含在第一个区间内
  labels = paste0("[", breaks[-length(breaks)], ", ", breaks[-1], ")")
)

# 3. 统计每个区间的通话次数
call_count <- table(successful_calls$Hour_Interval)

# 转换为数据框格式查看结果
as.data.frame(call_count)

方法二:dplyr(tidyverse)实现

如果习惯使用tidyverse生态,代码更简洁直观:

# 先加载tidyverse包
library(tidyverse)

call_count <- calls %>%
  # 筛选成功通话
  filter(!is.na(Call_Length)) %>%
  # 生成小时区间标签
  mutate(Hour_Interval = paste0("[", floor(Arrival_Time), ", ", floor(Arrival_Time)+1, ")")) %>%
  # 按区间分组统计
  group_by(Hour_Interval) %>%
  summarise(Call_Count = n()) %>%
  # 按区间顺序排序(可选)
  arrange(Hour_Interval)

# 查看结果
print(call_count)

关键说明

  • 两种方法都通过!is.na(Call_Length)过滤未接通的记录;
  • 区间生成逻辑:cut()函数自动生成连续断点,floor(Arrival_Time)直接取到达时间的整数部分作为区间起始值,两种方式都能满足[n, n+1)的区间需求;
  • 如果到达时间最大值为N,代码会自动生成到[N, N+1)的区间,无需手动指定范围。

内容的提问来源于stack exchange,提问作者324

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:50:51