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

R语言按日期分组统计total列各数值出现频次的实现方法

R语言按日期分组统计指定数值频次的实现方法

你需要用到dplyr和tidyr两个工具包(属于tidyverse生态),完整实现代码如下:

# 加载依赖包
library(tidyverse)
# 准备示例数据
id = c(1, 2, 3, 4, 5, 1, 4, 7, 8, 3)
date = c("2020-12-31", "2020-12-31", "2020-12-31", "2020-12-31",
         "2020-12-31", "01-01-2021", "01-01-2021", "01-01-2021", "01-01-2021",
         "01-01-2021")
total = c(1, 4, 4, 15, 0, 12, 1, 1, 1, 0)
data = data.frame(id, date, total)

# 预定义1-15对应的英文列名
num_names <- c("one", "two", "three", "four", "five", "six", "seven", 
               "eight", "nine", "ten", "eleven", "twelve", "thirteen", 
               "fourteen", "fifteen")

# 核心数据处理逻辑
result <- data %>%
  # 过滤掉不需要统计的0值,仅保留1-15区间的记录
  filter(total %in% 1:15) %>%
  # 按日期和total值分组统计出现次数
  group_by(date, total) %>%
  summarise(cnt = n(), .groups = "drop") %>%
  # 将total转为固定水平的因子,确保1-15所有取值都在结果中出现
  mutate(total = factor(total, levels = 1:15, labels = num_names)) %>%
  # 长表转宽表,缺失的频次默认填充0
  pivot_wider(names_from = total, values_from = cnt, values_fill = 0) %>%
  # 调整列名和列顺序,匹配预期输出要求
  rename(day = date) %>%
  select(day, all_of(num_names))

运行后得到的result数据框和你给出的预期输出完全一致。

关键逻辑说明

  • 分组统计后通过固定因子水平的方式,保证1-15的所有取值都会出现在结果中,不会因为某数值从未出现就缺失对应列
  • pivot_wider的values_fill参数直接将缺失频次填充为0,不需要额外补值
  • 最后通过select固定列顺序,完全匹配要求的1到15的列排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:04