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

R语言批量下载SDSS光谱CSV文件及合并数据集方法咨询

R语言实现SDSS光谱数据批量下载与合并

1. 批量下载指定plate下多fibreid的CSV数据

SDSS的当前查询接口不支持通配符批量查询,你可以通过构造循环遍历目标fibreid列表的方式实现批量下载,同时可以增加异常处理逻辑避免单个fibreid下载失败导致整个任务中断,参考代码如下:

# 配置固定参数,按需替换为你需要的plateid、mjd值
target_plate <- 4055
target_mjd <- 55359
# 配置需要下载的fibreid范围,示例为1-100,可根据实际需求修改
target_fibreids <- 1:100
# 初始化列表存储所有下载结果
spec_data_list <- list()

for (fid in target_fibreids) {
  # 拼接对应fibreid的查询URL
  request_url <- paste0(
    "https://dr14.sdss.org/optical/spectrum/view/data/format=csv/spec=full?",
    "mjd=", target_mjd,
    "&fiberid=", fid,
    "&plateid=", target_plate
  )
  # 异常捕获,单个下载失败不终止整体任务
  tryCatch({
    spec_data_list[[as.character(fid)]] <- read.csv(request_url)
    message("fibreid=", fid, " 下载完成")
  }, error = function(err) {
    message("fibreid=", fid, " 下载失败,错误:", err$message)
  })
}

所有下载成功的光谱数据会存储在spec_data_list列表中,列表名对应fibreid值。

2. 多光谱表合并为统一数据集

在所有光谱的波长轴完全一致的前提下,可以提取公共波长列,再将各表的最佳拟合列按fibreid拼接为统一数据集,参考代码如下:

# 先过滤掉下载失败产生的空元素
spec_data_list <- Filter(NROW, spec_data_list)
# 取第一个光谱的波长作为公共轴
merged_spec <- data.frame(wavelength = spec_data_list[[1]][, 1])

# 遍历所有光谱,提取最佳拟合列加入合并表
for (fid in names(spec_data_list)) {
  # 校验当前光谱波长是否与公共轴一致,避免数据错位
  if (!all(spec_data_list[[fid]][, 1] == merged_spec$wavelength)) {
    warning("fibreid=", fid, " 波长与公共轴不匹配,已跳过")
    next
  }
  # 提取第三列(最佳拟合列)加入合并表,列名标记对应fibreid
  merged_spec[[paste0("fibre_", fid, "_best_fit")]] <- spec_data_list[[fid]][, 3]
}

最终生成的merged_spec第一列为公共波长,后续每列对应一个fibreid的最佳拟合值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 01:27:00