如何合并两个包含聚合值的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
相关产品推荐
相关产品推荐

