r语言 - 在数据框列表中删除带有 NA 的列



考虑一个名为GEER的大型数据帧列表,其中一些列只包含NA。在R中,我如何从所有元素中删除包含NA的所有列。

*并非所有元素都含有NAs。

> GEER
$ ch_0  :'data.frame': 74 obs. of  6000 variables:
..$ TIME  : Factor w/ 527 levels "2020-01" "2020-03" "2020-04" ...
..$ NAME  : Factor w/ 100 levels "XTC_R" "DCC_S" "HG_CC" ...
..$ K_207  : num [1:100] 10.7 18.5 18.7 10.3 62.6 ...
..$ K_220  : num [1:100] 33.2 70.6 13.5 13.7 15.5 ...
..$ M_220  : num [1:100] 10.3 18.04 18.3 9.7 5.7 ...
..$ M_207  : num [1:100] 4.8 4.5 4.0 6.5 5.1 ...
$ ch_1290  :'data.frame':  380 obs. of  6000 variables:
..$ TIME  : Factor w/ 150 levels "2020-01" "2020-03" "2020-04" ...
..$ NAME  : Factor w/ 100 levels "KTC_D" "DSC_C" "KL_SC" ...
..$ K_507  : num [1:100] 10.7 18.5 18.7 10.3 12.6 ...
..$ K_444  : num [1:100] NA NA NA NA NA ...
..$ M_513  : num [1:100] NA NA NA NA NA ...
..$ M_102  : num [1:100] NA NA NA NA NA ...
..$ K_505  : num [1:100] 14.0 18.3 14.7 11.2 12.6 ...

期望的输出将是:

> GEER_out
$ ch_0  :'data.frame': 74 obs. of  6000 variables:
..$ TIME  : Factor w/ 527 levels "2020-01" "2020-03" "2020-04" ...
..$ NAME  : Factor w/ 100 levels "XTC_R" "DCC_S" "HG_CC" ...
..$ K_207  : num [1:100] 10.7 18.5 18.7 10.3 62.6 ...
..$ K_220  : num [1:100] 33.2 70.6 13.5 13.7 15.5 ...
..$ M_220  : num [1:100] 10.3 18.04 18.3 9.7 5.7 ...
..$ M_207  : num [1:100] 4.8 4.5 4.0 6.5 5.1 ...
$ ch_1290  :'data.frame':  380 obs. of  5997 variables:
..$ TIME  : Factor w/ 150 levels "2020-01" "2020-03" "2020-04" ...
..$ NAME  : Factor w/ 100 levels "KTC_D" "DSC_C" "KL_SC" ...
..$ K_507  : num [1:100] 10.7 18.5 18.7 10.3 12.6 ...
..$ K_505  : num [1:100] 14.0 18.3 14.7 11.2 12.6 ...

谢谢你的建议。

您可以从janitor包中使用remove_empty:

library(janitor)
lapply(GEER, janitor::remove_empty, which = "cols")

base R中我们可以使用Filterlapply

lapply(GEER, function(dat) Filter(function(x) any(!is.na(x)), dat))

最新更新