R循环遍历dataframe每列按条件过滤并生成独立dataframe或存入列表
基础R实现(无需额外安装包,效率最高)
直接用lapply遍历所有列名,过滤后统一存入列表,不需要手动写循环:
# 遍历所有列生成过滤结果列表 filtered_list <- lapply(colnames(test), function(col_name) { cur_col <- test[[col_name]] # 应用过滤规则,仅保留当前列,drop=FALSE保证返回dataframe格式 test[(cur_col >= 0.8 & cur_col < 1) | (cur_col <= -0.8 & cur_col > -1), col_name, drop = FALSE] }) # 给列表元素设置对应列名,方便后续提取 names(filtered_list) <- colnames(test)
使用时直接按列名提取即可,比如获取ice列的过滤结果:filtered_list$ice
如果需要把每列的过滤结果单独存为全局环境的独立dataframe,可以再加一行代码:
# 批量生成独立dataframe,命名规则为「原列名_filtered」 list2env(setNames(filtered_list, paste0(names(filtered_list), "_filtered")), envir = .GlobalEnv)
运行后全局环境会自动生成ice_filtered、eonia_filtered等独立数据框。
tidyverse 风格实现(适合习惯tidyverse语法的场景)
用purrr的map函数实现相同逻辑:
library(purrr) library(dplyr) filtered_list <- map(colnames(test), ~ { test %>% filter((!!sym(.x) >= 0.8 & !!sym(.x) < 1) | (!!sym(.x) <= -0.8 & !!sym(.x) > -1)) %>% select(all_of(.x)) }) %>% set_names(colnames(test))
内容的提问来源于stack exchange,提问作者freddywit
相关产品推荐
相关产品推荐

