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

使用R调用Supabase API爬取SER-SID数据的遗留问题求助

解决SER-SID数据爬取的两个问题

问题1:种子重量(seed_weights)数据未返回

SER-SID的Supabase API默认不会返回所有字段,或者seed_weights存储在关联表中。你需要在API请求的select参数里明确指定要获取该字段,或者关联对应的表。

修正请求参数示例

假设你之前的API请求框架如下,修改select参数确保包含seed_weights:

library(httr)
library(jsonlite)

supabase_url <- "https://ser-sid.supabase.co/rest/v1/species"
api_key <- "your-api-key"

response <- GET(
  supabase_url,
  add_headers(
    "apikey" = api_key,
    "Authorization" = paste("Bearer", api_key)
  ),
  query = list(
    select = "*,seed_weights"  # 明确指定获取seed_weights字段
  )
)

raw_data <- fromJSON(content(response, "text"))

如果seed_weights在关联表(比如seed_traits)中,改用关联查询语法:

query = list(
  select = "*,seed_traits(seed_weights)"
)

问题2:DataFrame包含列表类型变量

用tidyr::unnest()可以将列表列展开为常规列,或根据嵌套结构用purrr处理:

扁平化列表列示例

library(tidyr)
library(dplyr)
library(purrr)

# 展开seed_weights列表(保留空值)
flattened_data <- raw_data %>%
  unnest(cols = seed_weights, keep_empty = TRUE)

# 若列表是嵌套JSON结构,先转成数据框再展开
flattened_data <- raw_data %>%
  mutate(seed_weights = map(seed_weights, as.data.frame)) %>%
  unnest(cols = seed_weights)

# 若不需要展开,可将列表转为字符串
flattened_data <- raw_data %>%
  mutate(seed_weights_str = map_chr(seed_weights, ~ paste(.x, collapse = "; ")))

完整可运行代码

library(httr)
library(jsonlite)
library(dplyr)
library(tidyr)

supabase_url <- "https://ser-sid.supabase.co/rest/v1/species"
api_key <- "your-api-key"

# 请求包含seed_weights的完整数据
response <- GET(
  supabase_url,
  add_headers(
    "apikey" = api_key,
    "Authorization" = paste("Bearer", api_key)
  ),
  query = list(
    select = "*,seed_weights"
  )
)

# 解析并处理数据
final_data <- fromJSON(content(response, "text")) %>%
  unnest(cols = seed_weights, keep_empty = TRUE) %>%
  mutate(across(where(is.list), ~ map_chr(.x, ~ paste(.x, collapse = ", "))))

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

相关产品推荐
方舟 Agent Plan

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

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