在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
相关产品推荐
相关产品推荐

