如何将多日R数据框转换为各配对独立时间序列?
实现方法
首先,先把你提供的三维数组数据在R中构造出来(如果你的数据已经是数组格式可跳过这一步):
# 构造对应三维数组 data_array <- array( data = c( # 2020-10-03 0.000000, 0.957277, 3.361026, 0.957277, 0.000000, 8.420407, 3.361026, 8.420407, 0.000000, # 2020-10-04 0.0000000, 0.2106529, 5.875128, 0.2106529, 0.0000000, 8.678178, 5.8751284, 8.6781781, 0.000000, # 2020-10-05 0.00000000, 0.02922629, 5.234718, 0.02922629, 0.00000000, 5.109506, 5.23471797, 5.10950603, 0.000000 ), dim = c(3, 3, 3), dimnames = list( c("A", "B", "C"), c("A", "B", "C"), as.Date(c("2020-10-03", "2020-10-04", "2020-10-05")) ) )
接下来用tidyverse工具链把数据整理成适合做时间序列的长格式,同时过滤掉重复配对(比如A-B和B-A)和无意义的对角线(A-A):
library(tidyverse) # 转换为长格式数据框 tidy_data <- as.data.frame.table(data_array, responseName = "value") %>% rename(row = Var1, col = Var2, date = Var3) %>% mutate(date = as.Date(date)) %>% # 只保留row < col的配对,避免重复 filter(row < col) %>% # 生成配对标识 mutate(pair = paste(row, col, sep = "-"))
方式1:分面展示所有配对的时间序列
如果想在一张图里同时看所有配对的趋势,用分面:
ggplot(tidy_data, aes(x = date, y = value)) + geom_line(linewidth = 1, color = "#2c3e50") + geom_point(size = 2, color = "#e74c3c") + # 按配对分面,y轴自适应 facet_wrap(~pair, scales = "free_y") + labs(x = "日期", y = "数值", title = "各元素配对的时间序列变化") + theme_minimal()
方式2:生成每个配对的单独时间序列图
如果需要每个配对单独导出图片,可以用purrr批量生成:
# 批量创建每个配对的可视化对象 plot_list <- map(unique(tidy_data$pair), function(current_pair) { plot_data <- filter(tidy_data, pair == current_pair) ggplot(plot_data, aes(x = date, y = value)) + geom_line(linewidth = 1, color = "#3498db") + geom_point(size = 2.5, color = "#f39c12") + labs(x = "日期", y = "数值", title = paste("配对", current_pair, "的时间序列")) + theme_minimal() }) # 查看单个图(比如A-B配对) plot_list[[1]] # 批量保存所有图到当前工作目录 walk2(plot_list, unique(tidy_data$pair), function(plot, pair_name) { ggsave( filename = paste0("pair_time_series_", pair_name, ".png"), plot = plot, width = 6, height = 4, dpi = 300 ) })
内容的提问来源于stack exchange,提问作者Reeb
相关产品推荐
相关产品推荐

