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

如何从嵌套列表中提取数据框的指定单列并保留原结构?

解决方案

方法一:使用purrr包的map_depth(指定嵌套深度)

如果明确知道列表的嵌套深度(本例为2层),可以用map_depth直接对最底层元素操作,提取第一列并保留数据框结构:

library(purrr)
library(tibble)

# 原始数据
d1 <- tibble(X1 = 1:3, X2 = 0)
d2 <- tibble(X1 = 4:6, X2 = 0)
d3 <- tibble(X1 = 7:9, X2 = 0)

L <- list(
  list(d1, d1, d1),
  list(d2, d2, d2),
  list(d3, d3, d3)
)

# 提取第一列,维持原嵌套结构
L_new <- map_depth(L, 2, ~ .x[, 1, drop = FALSE])

drop = FALSE用于确保提取后仍是数据框(tibble),而非向量。

方法二:基础R递归函数(适配任意嵌套深度)

如果列表嵌套深度不固定,递归函数可自动遍历所有层级,遇到数据框就提取第一列:

# 定义递归提取函数
extract_first_col <- function(x) {
  if (is.data.frame(x)) {
    return(x[, 1, drop = FALSE])
  } else if (is.list(x)) {
    lapply(x, extract_first_col)
  } else {
    x
  }
}

# 应用函数到原列表
L_new <- extract_first_col(L)

验证结果

查看处理后的列表元素,确认仅保留第一列且结构不变:

> L_new[[1]][[1]]
# A tibble: 3 × 1
     X1
  <int>
1     1
2     2
3     3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:02:47