You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言清理遥感波段数据框列名 适配随机森林建模

R语言遥感波段数据框列名规范方案

第一步:提取日期与波段核心信息

原列名的中间时间部分长度不固定,用正则表达式可以精准匹配并剔除可变内容,保留日期和波段名:

# 捕获日期(YYYY-MM-DD)和末尾波段名,剔除中间可变字符
temp_names <- sub("^t(\\d{4}-\\d{2}-\\d{2})T.*_(.*)$", "\\1_\\2", colnames(Bands_reflectance_2017))
# 将日期横杠替换为下划线,得到如"2017_12_31_red_edge_3"的格式
cleaned_names <- gsub("-", "_", temp_names)

正则说明:^t(\\d{4}-\\d{2}-\\d{2})T.*_(.*)$中,(\\d{4}-\\d{2}-\\d{2})锁定开头的日期部分,T.*_匹配从T到最后一个下划线的所有可变字符,(.*)$捕获末尾的完整波段名,替换时仅保留这两个核心部分。

第二步:映射波段编码与月份转英文

先定义波段映射规则(根据你的实际波段调整),再拆分日期和波段,分别处理后组合成规范列名:

# 自定义波段名到编码的映射表
band_mapping <- c(
  "blue" = "B2", "green" = "B3", "red" = "B4",
  "red_edge_1" = "B5", "red_edge_2" = "B6", "red_edge_3" = "B7",
  "nir_1" = "B8", "nir_2" = "B8A", "swir_1" = "B11", "swir_2" = "B12"
)

# 拆分清理后的列名为日期段和波段段
name_parts <- strsplit(cleaned_names, "_", fixed = TRUE)

# 生成最终规范列名
final_names <- sapply(name_parts, function(parts) {
  # 提取日期组件
  month_num <- as.integer(parts[2])
  day <- parts[3]
  # 拼接含下划线的波段名(如red_edge_3)
  band_name <- paste(parts[4:length(parts)], collapse = "_")
  
  # 月份数字转英文名称
  month_name <- month.name[month_num]
  # 波段名替换为编码
  band_code <- band_mapping[band_name]
  
  # 组合成"B7_December31"格式
  paste0(band_code, "_", month_name, day)
})

# 将规范列名赋值回数据框
colnames(Bands_reflectance_2017) <- final_names

补充处理(可选)

如果存在重复的规范列名(如同一天同一波段的多期数据),可以用以下代码自动添加序号区分,避免建模时的列名冲突:

final_names <- make.names(final_names, unique = TRUE)

内容的提问来源于stack exchange,提问作者Nangula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:40:59