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

如何在R中突破1000行限制查询CDC的API数据?

解决CDC Socrata API查询限制与筛选问题

1. 修复查询参数错误

你的R代码报错是因为query参数传入的是R表达式usa_or_hhsregion == "9",而不是API要求的键值对列表。正确写法是把筛选条件包装成命名列表:

library(httr)
# 正确的筛选请求
res <- GET("https://data.cdc.gov/resource/jr58-6ysp.json", 
           query = list(usa_or_hhsregion = "9"))

这样就能精准筛选出usa_or_hhsregion等于"9"的数据,而非默认返回的region1数据。

2. 突破1000行返回限制

CDC使用的是Socrata API,默认单请求最多返回1000行,要获取全部数据需用分页查询——核心是通过$limit(设置每页最大行数,最高支持5000行)和$offset(设置起始偏移量)参数循环请求,直到返回空数据为止。

完整R代码示例(CSV端更适合海量数据)

以下是自动分页获取所有region9数据的脚本:

library(httr)
library(readr)

base_url <- "https://data.cdc.gov/resource/jr58-6ysp.csv"
limit <- 5000  # 每页最大行数,Socrata允许最高5000
offset <- 0
all_data <- data.frame()

while(TRUE) {
  # 构造分页请求参数
  query_params <- list(
    usa_or_hhsregion = "9",
    "$limit" = limit,
    "$offset" = offset
  )
  
  # 发送请求并读取数据
  res <- GET(base_url, query = query_params)
  current_data <- read_csv(content(res, "text"))
  
  # 当前页无数据则终止循环
  if(nrow(current_data) == 0) break
  
  # 合并数据
  all_data <- rbind(all_data, current_data)
  # 更新偏移量
  offset <- offset + limit
  
  # 可选:打印进度
  cat(sprintf("已获取 %d 行数据\n", nrow(all_data)))
}

# 保存最终数据
write_csv(all_data, "cdc_region9_data.csv")

补充说明

  • CSV端点比JSON更高效,百万级数据解析速度更快
  • 若遇到请求不稳定,可添加$order参数(如$order = "id ASC")确保分页顺序一致,避免重复或遗漏
  • 部分Socrata API支持$page参数,但$offset+$limit的兼容性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:35:06