如何根据DataFrame名称设置条件过滤列表中的数据
问题分析与解决方案
你的原代码存在关键问题:在lapply遍历列表元素时,names(x)获取的是当前DataFrame的列名,而非列表元素本身的名称,导致判断条件永远无法触发。以下是两种可行的解决方法:
方法1:基础R实现(遍历列表名称)
通过遍历列表名称来匹配对应DataFrame,同时根据名称执行不同过滤逻辑:
library(dplyr) # 遍历列表名称,获取对应DataFrame并过滤 FIF.result <- lapply(names(FIF.result), function(name) { df <- FIF.result[[name]] if (name == "A5") { df %>% filter(wskaznik > 20) } else { df %>% filter(wskaznik > 25) } }) # 重新为过滤后的列表命名(lapply会丢失原名称) names(FIF.result) <- c("A5", "A6")
方法2:使用purrr包的imap函数(更简洁)
purrr::imap可同时遍历列表元素和对应的名称,无需手动重新命名:
library(purrr) library(dplyr) FIF.result <- imap(FIF.result, function(df, name) { if (name == "A5") { df %>% filter(wskaznik > 20) } else { df %>% filter(wskaznik > 25) } })
内容的提问来源于stack exchange,提问作者GrBa
相关产品推荐
相关产品推荐

