如何在R语言中移除列表中行数为0的数据表?
处理包含空data.table的列表并批量执行线性回归
第一步:过滤空数据表
你可以通过判断每个data.table的行数是否大于0来筛选出非空表,以下是两种常用实现方式:
Base R 方法
# 假设你的data.table列表名为 dt_list non_empty_dts <- Filter(function(dt) nrow(dt) > 0, dt_list)
Tidyverse(purrr)方法
如果你习惯用tidyverse工具链,可以用purrr::keep():
library(purrr) library(data.table) non_empty_dts <- keep(dt_list, ~ nrow(.x) > 0)
第二步:批量执行线性回归
拿到非空表列表后,就可以用循环或映射函数批量跑lm():
Base R 用 lapply
# 假设要回归的变量是 y ~ x models <- lapply(non_empty_dts, function(dt) lm(y ~ x, data = dt))
Tidyverse 用 purrr::map
models <- map(non_empty_dts, ~ lm(y ~ x, data = .x))
进阶:同时过滤缺变量的表
如果担心有些非空表缺少你需要的x或y变量,可以在过滤时加入变量存在性检查:
Base R 版本
non_valid_dts <- Filter(function(dt) { nrow(dt) > 0 && all(c("x", "y") %in% names(dt)) }, dt_list)
Tidyverse 版本
non_valid_dts <- keep(dt_list, ~ { nrow(.x) > 0 && all(c("x", "y") %in% names(.x)) })
这样处理后,non_valid_dts里只会保留有数据且包含目标变量的表,后续跑回归就不会因为空表或缺变量报错了。
内容的提问来源于stack exchange,提问作者Mee
相关产品推荐
相关产品推荐

