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

R语言按周/月分组统计观测数与求和的问题求助

问题分析与解决办法

我来帮你梳理下原代码里的问题,再给出更简洁靠谱的dplyr解法~

首先说说你之前代码的问题:

  • 用aggregate得到的y.week和y.mon是普通数据框,它们的行名是格式化后的周/月字符串,不是xts对象的日期索引,所以index(y.week)这种写法是无效的;
  • 直接把counts_week整个数据框赋值给y.week$count也会出错,因为y.week$count需要的是数值向量,不是完整的数据框。

你习惯用dplyr做分组统计是非常好的选择,它能让分组计算的逻辑更直观,下面是优化后的完整方案:

第一步:统一生成基础数据

先把数据生成代码只写一次,避免重复冗余:

library(dplyr)

# 创建基础数据集
date_decision_made <- seq(as.Date("2014/1/1"), as.Date("2016/1/1"), by = "day")
property_damages_in_dollars <- rnorm(731, 100, 10)
final_data <- data.frame(date_decision_made, property_damages_in_dollars)

按周统计(求和+观测计数)

核心是先确保日期列是Date类型,再生成周分组标识,最后用summarise()一次性计算总和与观测数:

weekly_stats <- final_data %>%
  # 确保日期是Date类型(这里原数据已经是,但统一处理更稳妥)
  mutate(date_decision_made = as.Date(date_decision_made)) %>%
  # 按「年的周数-两位年份」分组,%W是周一为周起始,若要周日起始用%U
  group_by(week = format(date_decision_made, "%W-%y")) %>%
  summarise(
    total_damages = sum(property_damages_in_dollars, na.rm = TRUE),
    count = n()  # n()直接统计每组的观测数量
  )

按月统计(求和+观测计数)

逻辑和按周完全一致,只是分组标识换成「年-月」格式:

monthly_stats <- final_data %>%
  mutate(date_decision_made = as.Date(date_decision_made)) %>%
  group_by(month = format(date_decision_made, "%Y-%m")) %>%
  summarise(
    total_damages = sum(property_damages_in_dollars, na.rm = TRUE),
    count = n()
  )

这样处理后,weekly_stats和monthly_stats都会清晰包含分组标识、总损失金额、对应周期的观测数三列,代码简洁且逻辑一目了然。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:10:47