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

如何合并两个包含聚合值的tsibble对象?

解决聚合tsibble合并时的levels.agg_vec()报错问题

报错的核心原因是两个聚合后的tsibble的Parent列属于agg_vec类型(层级聚合向量),但二者的层级结构不匹配:Agg_TS_1包含Parent/Child的双层级,而Agg_TS_2只有Parent单层级,导致merge操作无法处理不同层级的agg_vec类型匹配。

下面提供两种可行的解决方法:

方法一:将agg_vec类型转换为普通字符列合并

先把聚合层级的agg_vec列转为普通字符,消除类型限制后完成合并,适合不需要保留聚合层级结构的场景:

library(tsibble)
library(fabletools)

# 转换Agg_TS_1的key列为普通字符
Agg_TS_1_flat <- Agg_TS_1 %>%
  mutate(
    Parent = as.character(Parent),
    Child = as.character(Child)
  )

# 转换Agg_TS_2的key列为普通字符
Agg_TS_2_flat <- Agg_TS_2 %>%
  mutate(Parent = as.character(Parent))

# 执行合并,自动填充缺失值
merged_data <- merge(Agg_TS_1_flat, Agg_TS_2_flat, by = c("Date", "Parent"), all.x = TRUE)

方法二:扩展层级结构后合并(保留tsibble聚合属性)

给Agg_TS_2添加与Agg_TS_1匹配的Child层级列(值为<aggregated>,对应Agg_TS_1中的父级汇总行),让两个tsibble的key结构完全一致,从而可以正常合并并保留聚合属性:

library(tsibble)
library(fabletools)

# 扩展Agg_TS_2的层级,添加Child列(值为父级聚合标识)
Agg_TS_2_expanded <- Agg_TS_2 %>%
  mutate(Child = aggregated(Parent))

# 按完整key合并,Agg_TS_1的子级行自动填充Value2为NA
merged_ts <- merge(Agg_TS_1, Agg_TS_2_expanded, by = c("Date", "Parent", "Child"), all.x = TRUE)

# 也可以用dplyr的left_join替代merge,效果一致
# merged_ts <- left_join(Agg_TS_1, Agg_TS_2_expanded, by = c("Date", "Parent", "Child"))

说明

  • 方法二保留了tsibble的聚合层级结构,后续仍可使用fabletools的聚合相关函数(如reframe()、forecast());
  • all.x = TRUE参数确保保留Agg_TS_1的所有行,对应Agg_TS_2中无匹配的行自动填充Value2为NA,符合你需要的缺失值填充效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:40:25