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

如何从嵌套结构不一致的列表创建指定格式的tibble

解决嵌套列表中subject结构不一致导致的tibble列错位问题

针对你遇到的嵌套列表结构不一致(部分作者subject是单条键值对,部分是多子列表嵌套)导致的列错位问题,可通过统一subject结构再整理的方式解决,具体代码如下:

library(tidyverse)

# 处理目标列表并生成期望的tibble
result <- listexample$books %>%
  # 将books列表转换为tibble并展开每本书
  tibble(books = .) %>%
  unnest_longer(books) %>%
  # 提取书籍基础信息并展开作者列表
  mutate(
    title = books$title,
    authors = books$authors
  ) %>%
  select(title, authors) %>%
  unnest_longer(authors) %>%
  # 统一subject结构:将单条subject包装为列表,确保所有subject都是子列表的集合
  mutate(
    subject = map(authors$subject, ~ if (!is.null(.x$area)) list(.x) else .x)
  ) %>%
  # 提取作者核心信息
  select(
    title,
    name = authors$name,
    location = authors$location,
    subject
  ) %>%
  # 展开所有subject条目
  unnest_longer(subject) %>%
  # 移除不需要的abbrev字段
  select(-subject$abbrev) %>%
  # 按书籍和作者分组,给每个学科区域编号
  group_by(title, name, location) %>%
  mutate(subject_col = paste0("subject", row_number(), "area")) %>%
  # 转换为宽格式,生成指定列
  pivot_wider(
    names_from = subject_col,
    values_from = subject$area
  ) %>%
  ungroup()

# 输出结果
print(result)

代码说明

  1. 统一subject结构:通过map函数判断,若subject是单条键值对(含area字段),则将其包装为列表;若已是多子列表结构则保持原样,确保后续展开时结构一致。
  2. 展开与筛选:依次展开书籍、作者、subject条目,移除不需要的abbrev字段。
  3. 宽格式转换:按书籍和作者分组,给每个学科区域生成顺序编号的列名,再通过pivot_wider转换为目标宽格式结构。

运行后将得到你期望的包含title、name、location、subject1area、subject2area、subject3area的tibble。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:09:57