如何在R中合并时间序列预测结果并保留分类标识?
问题原因
forecast包生成的forecast是特殊的S3类对象,调用data.frame()转换时,只会默认提取预测核心字段(点预测值、各置信区间上下限),手动添加的class属性不会被自动包含到转换后的数据集里,所以合并后看不到这个标识字段。
解决办法
方法1:先转成data.frame再添加class字段
先把forecast对象转换成标准data.frame,再追加class标识,之后再合并:
# 处理第一个模型的预测结果 df1 <- as.data.frame(forecast_data1) df1$class <- 1 # 处理第二个模型的预测结果 df2 <- as.data.frame(forecast_data2) df2$class <- 2 # 合并两个数据集 combined_df <- rbind(df1, df2)
方法2:用dplyr链式操作(更简洁)
既然已经加载了dplyr,可以用链式调用一步完成转换和字段添加,再用bind_rows合并(比基础rbind兼容性更好):
df1 <- forecast_data1 %>% as.data.frame() %>% mutate(class = 1) df2 <- forecast_data2 %>% as.data.frame() %>% mutate(class = 2) combined_df <- bind_rows(df1, df2)
方法3:保留时间索引的可读性
如果需要明确的时间列对应预测值,可以手动提取时间索引,一起存入data.frame:
df1 <- data.frame( forecast_date = time(forecast_data1), as.data.frame(forecast_data1), class = 1 ) df2 <- data.frame( forecast_date = time(forecast_data2), as.data.frame(forecast_data2), class = 2 ) combined_df <- rbind(df1, df2)
运行以上任意一种方法后,合并后的combined_df都会包含class字段,能清晰区分两个模型的预测结果。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

