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

在R中对含日度日期的数据集按月份聚合(Y值求和)

解决日度转月度并聚合求和的问题

没问题,我来帮你搞定这个日转月的聚合需求!先把你的数据集加载出来方便后续操作:

mydat <- structure(list(date = structure(c(1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("12.01.2015", "13.01.2015", "14.01.2015", "15.01.2015"), class = "factor"), Y = c(200L, 50L, 100L, 50L, 200L, 200L, 50L, 200L, 100L, 1000L, 1000L, 50L, 50L, 100L, 200L)), .Names = c("date", "Y"), class = "data.frame", row.names = c(NA, -15L))

接下来分三步完成转换和聚合:

1. 把因子类型的日期转成R可识别的日期格式

你的date列目前是因子(factor)类型,首先得转换成标准日期格式,注意你的日期是dd.mm.yyyy结构,所以要指定对应格式:

# 方法1:用lubridate包(推荐,语法更简洁)
library(lubridate)
mydat$date <- dmy(mydat$date) # dmy函数自动识别日-月-年格式

# 方法2:用base R原生函数
# mydat$date <- as.Date(mydat$date, format = "%d.%m.%Y")

2. 创建月度分组标识

我们需要把日度日期映射到对应的月份,生成一个分组用的变量:

# 方法1:生成当月第一天的日期(比如2015-01-01)
mydat$month_date <- floor_date(mydat$date, unit = "month")

# 方法2:生成文本格式的年月(比如"2015-01")
# mydat$year_month <- format(mydat$date, "%Y-%m")

3. 按月度聚合,对Y列求和

这里提供两种主流实现方式,你可以根据习惯选择:

方式1:用dplyr的管道操作(代码更易读)

library(dplyr)

monthly_result <- mydat %>%
  group_by(month_date) %>% # 按月度分组
  summarise(total_Y = sum(Y, na.rm = TRUE)) # 求和,na.rm处理可能的缺失值

# 查看结果
print(monthly_result)

方式2:用base R的aggregate函数

monthly_result_base <- aggregate(Y ~ month_date, data = mydat, sum, na.rm = TRUE)
colnames(monthly_result_base)[2] <- "total_Y" # 重命名求和列
print(monthly_result_base)

你的示例数据全是2015年1月的记录,所以最终结果会是一行,total_Y等于所有Y值的总和3450。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:46:43