在R语言中统计连续空闲时长分组计数并生成统计图表
实现步骤
1. 加载依赖并准备数据
先加载所需工具包,再处理用户提供的数据集:
library(chron) library(dplyr) library(ggplot2) # 用户原始数据集 Date <- c("03/06/2019", "03/06/2019", "03/06/2019", "03/06/2019", "03/06/2019", "03/06/2019", "03/06/2019", "03/06/2019") Time <- c("17:15:00","17:16:00", "17:17:00", "17:21:00", "17:22:00", "17:25:00", "17:26:00", "17:28:00") idleness <- c(1, 1, 1, 1, 1, 1, 1, 1) df1 <- data.frame(Date, Time, idleness) # 转换Time列为chron的times类型 df1$Time <- chron(times = df1$Time)
2. 识别连续空闲段
通过计算时间间隔,给每个连续的空闲段分配唯一分组ID:
# 合并日期与时间为完整时间对象 df1$datetime <- chron(dates = df1$Date, times = df1$Time, format = c(dates = "m/d/Y", times = "h:m:s")) # 计算相邻时间的间隔(转成分钟单位) df1$interval <- c(NA, diff(df1$datetime) * 24 * 60) # 标记中断点,生成连续段分组ID df1$group_id <- cumsum(is.na(df1$interval) | df1$interval > 1)
3. 统计各时长的连续段数量
分组计算每个空闲段的长度,再统计不同长度的出现次数:
# 计算每个连续段的空闲时长(分钟数) segment_lengths <- df1 %>% group_by(group_id) %>% summarise(length = n()) %>% pull(length) # 生成目标统计表格 result <- as.data.frame(table(segment_lengths)) %>% rename(`连续空闲时长` = segment_lengths, `计数` = Freq) %>% mutate(`连续空闲时长` = paste(`连续空闲时长`, "分钟")) # 输出结果表格 print(result)
运行后将得到符合预期的统计结果:
| 连续空闲时长 | 计数 |
|---|---|
| 1分钟 | 1 |
| 2分钟 | 2 |
| 3分钟 | 1 |
4. 生成可视化图表
用柱状图展示连续空闲时长与计数的关系:
ggplot(result, aes(x = `连续空闲时长`, y = `计数`)) + geom_bar(stat = "identity", fill = "#2c3e50") + labs(title = "连续空闲时长分布", x = "连续空闲时长", y = "计数") + theme_minimal()
内容的提问来源于stack exchange,提问作者Niro Mal
相关产品推荐
相关产品推荐

