R语言使用apply族函数按列求和条件筛选列表中的dataframe,避免for循环
你原有代码运行后返回空列表的核心问题是操作逻辑错误:LDF是存储多个dataframe的列表结构,无法直接通过LDF$Value调取所有子dataframe的Value列,该写法返回值为空,后续sapply运算自然得不到有效结果。
你可以通过在sapply中传入匿名函数的方式实现需求,对列表中的每个子dataframe单独提取Value列求和后做判断,代码如下:
LDF <- LDF[sapply(LDF, function(df) sum(df$Value) > 0)]
如果你的数据中存在NA值,为了避免求和返回NA导致判断失效,可以在sum函数中增加na.rm = TRUE参数:
LDF <- LDF[sapply(LDF, function(df) sum(df$Value, na.rm = TRUE) > 0)]
用你提供的示例数据运行上述代码后,会保留第一个Value列总和为正的dataframe,删除第二个总和为负的dataframe,符合过滤逻辑。
内容的提问来源于stack exchange,提问作者Vinícius Felizatti
相关产品推荐
相关产品推荐

