如何在R语言for循环中删除列表内的空dataframe数据框
R语言列表删除空数据框解决方案
首先要注意:如果正序遍历列表删除元素,删除后列表长度会变短,后面元素的索引会往前移,很容易出现漏删或者下标越界的问题,所以推荐倒序遍历实现。
1. for循环实现方案
# 从最后一个元素倒着往前遍历 for (i in length(x):1) { # 判断当前数据框是否为空(列数为0就是你示例里的空白数据框) if (ncol(x[[i]]) == 0) { x[[i]] <- NULL } }
运行完之后x里就只剩下两个非空的数据框了,原来的第2、4个空框会被直接删除。
2. 更简洁的无循环方案
如果你不需要强制用for循环,直接用内置的Filter函数筛选更方便,代码更短也不容易出问题:
# 只保留列数大于0的非空数据框 x <- Filter(function(df) ncol(df) > 0, x)
如果是tidyverse用户,用purrr包的keep函数写法更直观:
library(purrr) x <- keep(x, ~ ncol(.x) > 0)
补充说明:如果你需要兼容完全空白(行和列都为0)的数据框,判断条件可以改成
nrow(df) == 0 && ncol(df) == 0,你提供的示例里的空数据框有行、没有列,所以只用ncol判断就足够。
内容的提问来源于stack exchange,提问作者Vinícius Felizatti
相关产品推荐
相关产品推荐

