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

使用rbcb包聚合巴西央行日数据为月数据时summarize结果全相同

问题分析与解决方案:rbcb包日度转月度数据异常

问题场景

尝试用rbcb包获取巴西央行Selic利率日度数据并聚合为月度均值,但运行后所有行结果均为相同值,且分组仍按日度显示。

原代码:

selic <- get_series(432, start_date = '2001-12-03', end_date = '2023-02-01')
nomes <- c("mes","selic")
colnames(selic) <- nomes
selic$meses <- floor_date(selic$mes)
m_selic <- selic %>% 
    group_by(meses) %>% 
    summarise(mean = mean(selic)) %>% 
    as.data.frame()

异常输出:

head(m_selic):
# A tibble: 6 × 2
  meses               `mean(selic)`
  <dttm>                      <dbl>
1 2001-12-03 00:00:00            19
2 2001-12-04 00:00:00            19
3 2001-12-05 00:00:00            19
4 2001-12-06 00:00:00            19
5 2001-12-07 00:00:00            19
6 2001-12-08 00:00:00            19

错误原因

  1. 分组维度错误:floor_date(selic$mes)未指定聚合单位,默认按输入日期的精度(日度)截断,导致meses列仍为每日日期,分组后每个组仅包含一行数据,均值等于该行自身值。
  2. 缺失值处理缺失:未设置na.rm = TRUE,若数据存在缺失值会直接导致均值计算结果为NA。

修正后的代码

library(rbcb)
library(dplyr)
library(lubridate)

selic <- get_series(432, start_date = '2001-12-03', end_date = '2023-02-01')
colnames(selic) <- c("mes", "selic")

# 将日期截断到当月第一天,指定unit = "month"实现月度分组
selic$meses <- floor_date(selic$mes, unit = "month")

# 按月份分组计算均值,添加na.rm = TRUE处理缺失值
m_selic <- selic %>% 
    group_by(meses) %>% 
    summarise(mean_selic = mean(selic, na.rm = TRUE)) %>% 
    as.data.frame()

# 查看修正后的结果
head(m_selic)

关键修正说明

  • floor_date(selic$mes, unit = "month"):将所有日度日期统一转换为当月第一天,确保分组维度为月份而非单日。
  • mean(selic, na.rm = TRUE):计算月度均值时自动忽略缺失值,避免结果出现NA。
  • 重命名均值列为mean_selic,提升列名可读性。

内容的提问来源于stack exchange,提问作者vini.m.oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:13:11