清理Excel导出的非结构化DataFrame并新增Type列求解决方案
优化DMO国债DataFrame的实现方案
核心需求
- 将原列名
Conventional Gilts重命名为Name - 新增
Type列,自动识别原Conventional Gilts列中的分组类别,填充到对应组内的所有数据行 - 支持动态适配新增分组类别,无需手动维护类别列表
实现步骤(R语言)
1. 读取Excel数据
用readxl包读取目标文件,保留原始行结构:
library(readxl) library(dplyr) library(tidyr) # 读取Excel文件(替换为你的本地文件路径) df <- read_excel("path/to/your/file.xls", col_names = TRUE)
2. 动态识别分组行
分组行的特征是:仅Conventional Gilts列有值,其余列均为空/NA。基于此特征标记分组行并提取类别:
df <- df %>% mutate( # 标记分组行:判断除目标列外的所有列是否全为NA is_group = rowSums(!is.na(select(., -`Conventional Gilts`))) == 0, # 仅在分组行中记录Type值,其余行留空 Type = ifelse(is_group, `Conventional Gilts`, NA) )
3. 填充Type列并整理数据
将分组类别向下填充至对应组的数据行,再清理临时标记列并重命名目标列:
df <- df %>% fill(Type, .direction = "down") %>% # 向下填充最近的分组类别 filter(!is_group) %>% # 移除分组标题行,只保留有效数据 rename(Name = `Conventional Gilts`) # 重命名列
4. 动态适配验证
如果后续数据新增了新的分组类别(比如Super-Long),上述代码无需任何修改即可自动识别并填充——因为分组行的判断逻辑基于数据特征,而非硬编码的类别列表。
内容的提问来源于stack exchange,提问作者akezd
相关产品推荐
相关产品推荐

