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

如何在动态公司数量场景下合并每行的嵌套DataFrame

问题描述

我用以下R代码(最小可复现示例)获取专利数据:

library(magrittr)

data <- tibble::tibble(
  company = c(
    "Google",
    "Apple"
  )
) %>%
  dplyr::mutate(patents = purrr::map(
    .x = company,
    .f = function(x) {
      data <- patentsview::search_pv(
        query = patentsview::qry_funs$contains(assignee_organization = x),
        fields = c(
          "app_number",
          "app_country",
          "app_date",
          "patent_abstract",
          "patent_date",
          "patent_number",
          "patent_title"
        ),
        sort = c("app_date" = "asc"),
        endpoint = "patents",
        mtchd_subent_only = FALSE
      )

      patentsview::unnest_pv_data(data$data, pk = "patent_number") %>%
        lapply(FUN = tibble::as_tibble) %>%
        as.matrix() %>%
        t() %>%
        tibble::as_tibble()
    }
  )) %>%
  tidyr::unnest(cols = c(patents)) %>%
  tibble::column_to_rownames(var = "company") %>%
  t() %>%
  tibble::as_tibble(.name_repair = "unique", rownames = NA)

运行后得到的DataFrame结构如下:

> data
# A tibble: 2 × 2
  Google            Apple            
* <list>            <list>           
1 <tibble [25 × 5]> <tibble [25 × 5]>
2 <tibble [25 × 4]> <tibble [25 × 4]>

示例里只用到两家公司,但实际场景中公司数量是动态变化的。我需要把每行里不同公司的嵌套DataFrame合并成单个DataFrame,新增一个Combined列,最终得到如下结构:

# A tibble: 2 × 3
  Google              Apple             Combined
* <list>              <list>            <list>
  1 <tibble [25 × 5]> <tibble [25 × 5]> <tibble [50 × 5]> 
  2 <tibble [25 × 4]> <tibble [25 × 4]> <tibble [50 × 4]> 
解决方案

可以用dplyr结合purrr的相关函数处理,推荐用rowwise配合c_across实现动态列的合并:

library(dplyr)
library(purrr)
library(tibble)

data <- data %>%
  rowwise() %>%
  mutate(Combined = list(bind_rows(c_across(everything())))) %>%
  ungroup()

说明:

  • rowwise():指定后续操作按行执行
  • c_across(everything()):动态选取当前行的所有列(即所有公司的嵌套DataFrame)
  • bind_rows():将当前行的所有嵌套DataFrame合并为单个DataFrame,用list()包裹保持嵌套结构
  • ungroup():取消按行分组状态,避免影响后续操作

如果公司列有特定命名规则(比如统一前缀),可以把everything()替换为starts_with("前缀名")这类列选择器,适配动态变化的列数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:55:57