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

如何合并嵌套在DataFrame中的子DataFrame并生成目标组合结果?

问题描述

我有如下示例数据sampledata,可通过以下代码生成:

# 生成示例数据
sampledatain1 <- data.frame(in_1=c(1,2,3,4,5),in_2=c("A","B","C","D","E"),stringsAsFactors = F)
sampledatain2 <- data.frame(in_1=c(6,7,8,9,10),in_2=c("F","G","H","I","J"),stringsAsFactors = F)
sampledatain3 <- data.frame(in_1=c(99,98,97,96,95),in_2=c("Z","Y","X","W","V"),stringsAsFactors = F)
sampledata <- data.frame(row = 1:3,
                    colmerge1 = c("MA","MB","MC"), 
                    colmerge2 = -99:-97,
                    stringsAsFactors = FALSE)
sampledata$df <- list(sampledatain1,sampledatain2,sampledatain3)

我希望将所有嵌套的子DataFrame展开,与对应行的外层列合并后组合成如下desired_data格式的结果:

# 生成目标数据
library(data.table)
sampledatain1$row <- 1
sampledatain1$colmerge1 <- "MA"
sampledatain1$colmerge2 <- -99

sampledatain2$row <- 2
sampledatain2$colmerge1 <- "MB"
sampledatain2$colmerge2 <- -98

sampledatain3$row <- 3
sampledatain3$colmerge1 <- "MC"
sampledatain3$colmerge2 <- -97

desired_data <- rbindlist(list(sampledatain1,sampledatain2,sampledatain3))

请问如何通过函数实现从sampledata生成desired_data?


解决方案

下面提供几种高效的实现方式:

方法1:使用data.table包(与目标代码风格一致)

直接利用data.table的分组展开功能,一步完成嵌套数据框的展开与外层列的合并:

library(data.table)
setDT(sampledata)
desired_data <- sampledata[, unnest(df), by = .(row, colmerge1, colmerge2)]

方法2:使用tidyverse系列包(dplyr + tidyr)

如果习惯tidyverse的管道语法,tidyr::unnest可以自动将嵌套列展开并与其他列匹配:

library(tidyverse)
desired_data <- sampledata %>%
  unnest(df)

方法3:Base R原生实现(无需额外安装包)

通过循环遍历每一行,将外层列与对应子数据框合并,最后用do.call(rbind, ...)拼接所有结果:

desired_data <- do.call(rbind, lapply(1:nrow(sampledata), function(i) {
  cbind(
    sampledata[i, c("row", "colmerge1", "colmerge2"), drop = FALSE],
    sampledata$df[[i]]
  )
}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:28:32