如何将合并后的xts对象还原为带原名称的列表?
还原合并后的xts对象列表
要将合并后的merge_li还原为原列表li的结构(保留原列表名称及内部列名),可以利用xts合并后的列名规则(原对象名+.+原列名)来拆分分组,步骤如下:
实现代码
library(xts) # 提取合并对象的列名 col_names <- colnames(merge_li) # 拆分列名:仅按第一个点分割,避免对象名含点时出错 split_names <- strsplit(col_names, "\\.", split = 1) obj_names <- sapply(split_names, `[`, 1) # 提取原列表对象名称 orig_colnames <- sapply(split_names, `[`, 2) # 提取原xts内部列名 # 按原对象名称分组列索引 obj_col_groups <- split(seq_along(col_names), obj_names) # 遍历分组,还原每个原xts对象 restored_li <- lapply(names(obj_col_groups), function(obj_name) { # 提取当前对象对应的列 target_cols <- obj_col_groups[[obj_name]] sub_xts <- merge_li[, target_cols] # 恢复原列名 colnames(sub_xts) <- orig_colnames[target_cols] # 去掉合并时补充的NA行,还原原xts的行结构 na.omit(sub_xts) }) # 给还原后的列表设置原名称 names(restored_li) <- names(obj_col_groups)
验证结果
可以通过以下代码确认还原后的列表与原列表结构、数据完全一致:
# 对比结构 str(li) str(restored_li) # 逐对象对比数据 all.equal(li[[1]], restored_li[[1]]) all.equal(li[[2]], restored_li[[2]]) all.equal(li[[3]], restored_li[[3]])
内容的提问来源于stack exchange,提问作者mr.T
相关产品推荐
相关产品推荐

