R语言如何从dataframe列表中筛选仅含2列的元素生成新列表
R 筛选列表中指定列数的dataframe
实现逻辑是遍历列表所有元素,筛选出同时满足「是dataframe类型、列数等于2」的元素存入新列表,以下是两种常用实现方式:
方法1:base R 原生实现(无需加载第三方包)
使用Filter函数直接对列表做过滤:
df1 <- data.frame(c(1:5), c(6:10)) df2 <- data.frame(c(1:7)) df3 <- data.frame(c(1:5), c("a", "b", "c", "d", "e")) my_list <- list(df1, df2, df3) # 核心过滤逻辑,兼容列表存在非dataframe元素的场景 new_list <- Filter(function(x) is.data.frame(x) && ncol(x) == 2, my_list)
验证结果:
sapply(new_list, ncol) # 输出为 2 2,对应符合条件的df1、df3
方法2:tidyverse 生态实现(使用purrr包)
适合习惯使用tidyverse语法的用户,用keep函数完成过滤:
library(purrr) new_list <- keep(my_list, ~is.data.frame(.x) && ncol(.x) == 2)
两种方法最终得到的new_list就是仅包含2列dataframe的目标列表,元素顺序和原列表中符合条件的元素顺序一致。
内容的提问来源于stack exchange,提问作者Muhammad Kamil
相关产品推荐
相关产品推荐

