You need to enable JavaScript to run this app. R语言按时间聚合并计算各分类值时间区间占比的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言按时间聚合并计算各分类值时间区间占比的实现方法

按时间分组计算分类变量占比的实现方案

你需要的核心逻辑是:按Time分组后,统计每个分类X的出现次数占本组总样本量的比例,同时自动补全未出现的分类为0,有两种常用可直接运行的实现方式:

方法1:tidyverse 实现(逻辑清晰,适合新手阅读)

# 构造示例数据
dat <- data.frame(
  Time = c("12:00:00","12:00:00","12:00:00","14:00:00","14:00:00","14:00:00"),
  X = c("A","B","B","A","B","C")
)

# 加载依赖包,首次使用需先运行 install.packages(c("dplyr","tidyr")) 安装
library(dplyr)
library(tidyr)

# 计算逻辑
result <- dat %>%
  # 按时间、分类统计每组样本数
  count(Time, X, name = "sample_count") %>%
  # 按时间分组计算占比
  group_by(Time) %>%
  mutate(prop = sample_count / n()) %>%
  ungroup() %>%
  # 转成宽表,缺失的分类自动补0
  pivot_wider(names_from = X, values_from = prop, values_fill = 0) %>%
  # 调整列名匹配目标格式
  rename_with(~paste0("% ", .), -Time)

方法2:基础R实现(无需加载额外包)

# 生成时间-分类列联表,自动补全所有分类的计数
count_tab <- table(dat$Time, dat$X)
# 按行(每个时间组)计算占比
prop_tab <- prop.table(count_tab, margin = 1)
# 转换为要求的数据框格式
result <- as.data.frame.matrix(prop_tab)
colnames(result) <- paste0("% ", colnames(result))
result <- cbind(Time = rownames(result), result)
rownames(result) <- NULL

两种方法都支持自动识别X的所有取值,无需提前手动指定要生成的占比列,运行后得到的结果完全匹配目标输出结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 12:36:03