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

R语言:如何将嵌套列表转换为指定格式的Data Frame?

嵌套列表转指定格式数据框的实现方案

原始嵌套列表

nested_list <- list(
  ID1 = list(
    FEAT = list(
      feat1 = list(start = "1", end = "15", label = "CDR1"),
      feat2 = list(start = "20", end = "25", label = "CDR2")
    ),
    SEQ = "ACTGATCGTAGCTAGCTAGATGCTGATGTGTC"
  ),
  ID2 = list(
    SEQ = "ACTGATCGGCGGTGGCTAGCTGTGGGGCGCGCGACCGGGAAAA"
  )
)

目标数据框格式

id  feat feat_label feat_start feat_end                                    full_seq
1 ID1 feat1       CDR1          1       15            ACTGATCGTAGCTAGCTAGATGCTGATGTGTC
2 ID1 feat2       CDR2         20       25            ACTGATCGTAGCTAGCTAGATGCTGATGTGTC
3 ID2  <NA>       <NA>         NA       NA ACTGATCGGCGGTGGCTAGCTGTGGGGCGCGCGACCGGGAAAA

解决方案

直接使用as.data.frame(nested_list)无法处理嵌套结构并生成目标格式,可通过tidyverse工具链完成转换,核心用到unnest系列函数和enframe:

library(tidyverse)

result_df <- nested_list %>%
  # 将命名列表转为id-数据的两列结构
  enframe(name = "id", value = "data") %>%
  # 展开每个ID对应的FEAT和SEQ字段
  unnest_wider(data) %>%
  # 拆分FEAT中的每个feat子项为单独行,保留无FEAT的条目(自动补NA)
  unnest_longer(FEAT, indices_to = "feat", keep_empty = TRUE) %>%
  # 展开每个feat的start/end/label为独立列
  unnest_wider(FEAT, names_sep = "_") %>%
  # 重命名SEQ列并调整列顺序
  rename(full_seq = SEQ) %>%
  select(id, feat, feat_label, feat_start, feat_end, full_seq) %>%
  # 可选:将起始/结束位置转为整数类型
  mutate(across(c(feat_start, feat_end), as.integer))

# 输出结果
print(result_df)

关键步骤说明

  • enframe:把原始命名列表转换为便于处理的tibble结构,明确区分ID和对应的数据内容
  • unnest_wider(data):将每个ID对应的嵌套数据拆分为FEAT和SEQ两个独立列
  • unnest_longer(..., keep_empty = TRUE):把FEAT中的每个子项(如feat1、feat2)拆分为单独行,同时保留没有FEAT的ID2条目,自动填充缺失值为NA
  • unnest_wider(FEAT, names_sep = "_"):把每个feat的嵌套属性(start、end、label)拆分为带前缀的独立列,避免列名冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:03:11